Вполне вероятно, реализованный по дефолту арифметический пример в контексте защиты от спам-ботов покажется вам нелучшим решением... ок, давайте прикрутим к нашей формочке recaptcha, для Joomla это сегодня стандарт по умолчанию. Хотя, возможно, вы предпочитаете keycaptcha? - что ж, это дело вкуса.. и тем не менее. Recaptcha-plugin должен быть у вас уже включен, private и public keys - получены у Google и введены в соответствующие поля плагина. Отлично, дальнейшие наши шаги после установки модуля - будут следующими:
1. Стираем нашу арифметическую капчу, попросту убираем эти строчки из файла mod_contactform_masterpro.php:
$n1 = rand(1,20);
$n2 = rand(1,20);
$session->set('expect', $n1 + $n2, SESSION_NAMESPACE);
2. Далее, в самом конце области php этого же файла, сразу после
$category_name = $params->get('email1');
$category_name1 = $params->get('email2');
$category_name2 = $params->get('email3');
добавляем эти строчки:
JPluginHelper::importPlugin('captcha');
$dispatcher = JEventDispatcher::getInstance();
$dispatcher->trigger('onInit','dynamic_recaptcha_1');
3. Находим текстовое поле "message":
<tr>
<td valign="top"><label for="message">Сообщение</label></td>
<td><textarea name="message" id="message" class="validate[required]" cols="35" rows="5"><?=$_SESSION['post']['message']?></textarea></td>
<td valign="top"> </td>
</tr>
и размещаем, сразу после него, собственно recaptcha:
<tr>
<td colspan="3"><div id="dynamic_recaptcha_1"></div></td>
</tr>
4. Удаляем ненужное теперь:
<tr>
<td><label for="captcha"><?=$n1?> + <?=$n2?> =</label></td>
<td><input type="text" class="validate[required,custom[onlyNumber]]" name="captcha" id="captcha" /></td>
<td valign="top"> </td>
</tr>
5. С этим все, переходим к редактуре submit.php. Убираем за ненадобностью:
if($input->getInt('captcha') != $session->get('expect', null, SESSION_NAMESPACE))
$err[] = 'The captcha code is wrong!';
и добавляем на то же место (примерно 43 строка):
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
$res = $dispatcher->trigger('onCheckAnswer', $input->get('recaptcha_response_field'));
if(!$res[0]){
$err[] = 'The captcha code is wrong!';
}
6. Теперь нам с вами осталось отредактировать лишь script.js. Строчку
jQuery.validationEngine.buildPrompt("#captcha","* Неправильное значение!","error");
меняем на
jQuery.validationEngine.buildPrompt('#recaptcha_response_field',"* Неправильное значение! Нажмите генерацию нового кода перед повтороной отправкой формы","error");
Перезагружаем страничку и любуемся тем, что получилось. Впрочем, если хардкодить лениво - вы можете скачать уже готовый модуль формочки с подключенной recaptcha на странице форума.