Интеграция KCAPTCHA в модуль обратной связи для Joomla 1.5.x

Четверг, 18 Мар 2010 13:00

logo Joomla настолько демократичная cms, что в базовый поставке не имеет никакой защиты от спам-ботов, хотя имеет формы ввода данных в которые эти спам-боты могут нагадить. Для избавления от такой напасти будем использовать отечественную разработку под названием KCAPTCHA, написанную на php «для защиты от спама и флуда». В первой части я расскажу об интеграции с компонентом com_user, а во-второй сделаю интеграцию с com_contact. Интеграция будет проделана с Joomla 1.5.x.

Скачаем KCAPTCHA и распакуем архив в директорию «libraries» дистрибутива Joomla.

Теперь приступим к интеграции:

1) В корневом файле Joomla index.php после 17 строки добавим:

BEGIN PATCH KCAPTCHA
session_start();
if(isset($_SESSION['captcha_keystring'])&&($_SESSION['captcha_keystring']==$_POST['captcha']))
$_POST['captcha']=1;
else
$_POST['captcha']=0;
session_destroy();
// END PATCH KCAPTCHA

и после 92 строки:

$mainframe->triggerEvent(‘onAfterRender’);
// BEGIN PATCH KCAPTCHA
JSession::close();
>// END PATCH KCAPTCHA
/**
* RETURN THE RESPONSE
*/

2) В файле /components/com_contact/controller.php после строки 164 добавим:

$mail->setSubject( $FromName.’: ‘.$subject );
$mail->setBody( $body );
// BEGIN PATCH KCAPTCHA
if(1 !== $_POST['captcha']) {
JError::raiseWarning( 403, JText::_( ‘You need to enter the code shown’ ));
$this->setRedirect(JRoute::_(‘index.php?option=com_contact&view=contact&id=’.$contactId, false));
return false;
}
// END PATCH KCAPTCHA
$sent = $mail->Send();

3) В файл /components/com_contact/views/contact/tmpl/default_form.php строки

<br />
<br />
<button class="button validate" type="submit"><?php echo JText::_(‘Send’); ?></button>

Заменяем на:

<!— BEGIN PATCH KCAPTCHA —>
<br />
<br />
<table>
<tr>
<td width="130" height="25">Код безопасности:</td>
<td><span id="kcaptcha"><img src="<?php JURI::base() ?>libraries/captcha/index.php?<?php echo session_name(); ?>=<?php echo session_id(); ?>" alt="Включите эту картинку для отображения кода безопасности" style="vertical-align:-25px;" /><br /><a onclick="reload(); return false;" href="#">обновить, если не виден код</a></span></td>
</tr>
<tr>
<td width="130" height="25">Введите код:</td>
<td><input type="text" name="captcha" class="inputbox" size="20" id="captcha" /></td>
</tr>
<tr>
<td width="130" height="25"></td>
<td><button class="button validate" type="submit"><?php echo JText::_(‘Send’); ?></button></td>
</tr>
</table>
<script language=’javascript’ type="text/javascript">
<!—
function reload () {
var rndval = new Date().getTime();
document.getElementById(‘kcaptcha’).innerHTML = ‘<img src="libraries/captcha/index.php?rndval=’ + rndval + ‘" border="0" width="120" height="50" alt="" /><br /><a onclick="reload(); return false;" href="#">обновить, если не виден код</a>’;
};
//—>
</script>
<!— END PATCH KCAPTCHA —>

4) Добавим переводы созданных нами языковых констант в файл локализации. Открываем /language/ru-RU/ru-RU.ini и добавляем в любое место следующие строки:

# BEGIN PATCH KCAPTCHA
ENTER TEXT SHOWN BELOW=Введите код
YOU NEED TO ENTER THE CODE SHOWN=Вы должны ввести правильный код, указанный на картинке.
# END PATCH KCAPTCHA

Ну вот теперь всё готово! Можно поднастроить KCAPTCHA, делается это через файл kcaptcha_config.php:

$allowed_symbols — доступные символы для картинок

$length — количество символов для проверки

$width $height — ширина и высота картинки

$show_credits — показ ссылки на авторов, чтобы убрать — поставить false

$jpeg_quality — качество генерируемого изображения

Статья редактируется!!!



Вы можете оставить отзыв или трекбек со своего сайта.

2 комментария на «Интеграция KCAPTCHA в модуль обратной связи для Joomla 1.5.x»

  1. anton пишет:

    03 Ноя 2010 в 20:20

    Спасибо большое мне очень пригодилось!

    _________________________________________________________

  2. Ваня пишет:

    14 Апр 2011 в 10:02

    Привет! Это хорошо что есть такая статья ++++ тебе! Я создал свой компонент и хочу внедрить в него капчу, то что ты метод описал естественно не подходит, как я выяснил из за сессий. Вот скажи мне как можно внедрить капчу в любой компонент!? Я вот знаю что я близок к решению, но увы пока не смог реализовать!

Ваш отзыв