Здравствуйте! Решил сделать обзорную статья как добавить компонент recapcha в комментарии для гостей в Instant CMS2. Давайте пожалуй начнём.
1. Открываем файл по пути "/system/languages/ru/controllers/comments/comments.php". После шестой строки:
define('LANG_COMMENTS_OPT_IS_GUESTS_HINT', 'Незарегистрированные пользователи смогут добавлять комментарии');
вставляем ещё две строки:
define('LANG_COMMENTS_CAPCHA_FOR_GUESTS', 'Показывать капчу гостям'); define('LANG_COMMENTS_CAPCHA_FOR_GUESTS_HINT', 'Отображать капчу при добавлении комментариея гостем чтобы избежать спама в комментариях');
Дальше открываем файл по пути "/system/languages/en/controllers/comments/comments.php". После шестой строки:
define('LANG_COMMENTS_OPT_IS_GUESTS_HINT', 'Not registered users will be able to add comments');
вставляем две строки:
define('LANG_COMMENTS_CAPCHA_FOR_GUESTS', 'Show CAPTCHA for guests'); define('LANG_COMMENTS_CAPCHA_FOR_GUESTS_HINT', 'Show the captcha by adding a guest commentary to avoid comment spam');
Здесь мы указали текстовые метки для опции включения капчи для гостей в админке компонента.
2. Дальше открываем файл по пути: "/system/controllers/comments/backend/forms/form_options.php". После 16 строки(после блока
new fieldCheckbox
('is_guests', array( 'title' => LANG_COMMENTS_OPT_IS_GUESTS,
'hint' => LANG_COMMENTS_OPT_IS_GUESTS_HINT,
)),
) вставляем вот такой код:
new fieldCheckbox
('capcha_for_guests', array( 'title' => LANG_COMMENTS_CAPCHA_FOR_GUESTS,
'hint' => LANG_COMMENTS_CAPCHA_FOR_GUESTS_HINT,
)),
Этим мы добавляем новую опцию в админке комментариев.
3. Теперь идём в файл "/templates/имя_используемого_шаблона(исходный шаблон — default)/controllers/comments/list.tpl.php". После шестой строки:
<?php $is_karma_allowed = $user->is_logged && !cmsUser::isPermittedLimitHigher('comments', 'karma', $user->karma); ?>
вставляем строки:
<?php $captcha_for_guests = cmsEventsManager::hook('captcha_html'); ?>
<?php $enable_capcha = !empty($this->controller->options['capcha_for_guests']); ?>
и в этом же файле после 98-ой строки:
<?php echo $user->is_logged ? html_editor('content') : html_textarea('content'); ?>
вставляем код:
<?php if (!$user->is_logged && $enable_capcha)
{
echo $captcha_for_guests;
} ?>
Здесь мы прописываем что если выбрана опция "Показывать гостям капчу" то для всех гостей при добавлении показывать капчу.
4. Теперь открываем файл "/system/controllers/comments/actions/submit.php". В этом файле сразу после 136-ой строки (после блока кода:
'user_id' => $user->id,
'parent_id' => $parent_id,
'target_controller' => $target_controller,
'target_subject' => $target_subject,
'target_id' => $target_id,
'content' => $content,
'content_html' => $content_html,
'author_url' => $user->ip
);
Вставляем вот такой код:
if (!$user->is_logged && $enable_capcha)
{
$is_captcha_for_comments_valid = cmsEventsManager::hook('captcha_validate', $this->request);
if (!$is_captcha_for_comments_valid)
{
$result_capcha_invalid = array( 'error' => 'capcha_invalid',
'message' => LANG_CAPTCHA_ERROR
);
$template->renderJSON($result_capcha_invalid);
}
}
Здесь мы смотрим включена ли капча и если включена, то проверяем правильно ли она разгадана, если да, то добавляем комментарий, если нет то выбрасываем сообщение об ошибке.
Теперь смотрим в админеке комментариев в опциях должен появиться параметр "Показывать капчу гостям" и если вы его включите то для всех кто не зарегистрировался при попытке добавить комментарий будет выводиться капча. Демо
здесь, recapcha для гостей включена.
Архив с обновлёнными файлами для добавления рекапчи в комментарии. Работает на 2.5.0-2.5.1 с другими версиями не тестился, чтобы установить просто извлекаем всё из архива в корень сайта с заменой предварительно сделав бэкап.