Добавляем капчу для гостей в комментарии на InstantCMS 2.5

MM Web Studio Group

Добавляем капчу для гостей в комментарии на InstantCMS 2.5
Здравствуйте! Решил сделать обзорную статья как добавить компонент 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". После шестой строки: 
is_logged && !cmsUser::isPermittedLimitHigher('comments', 'karma', $user->karma); ?>
 вставляем строки: 
controller->options['capcha_for_guests']); ?>
 и в этом же файле после 98-ой строки: 
is_logged ? html_editor('content') : html_textarea('content'); ?>
 вставляем код: 
is_logged && $enable_capcha)
{
echo $captcha_for_guests;
} ?>
 Здесь мы прописываем что если выбрана опция «Показывать гостям капчу» то для всех гостей при добавлении показывать капчу.4. Теперь открываем файл "/system/controllers/comments/actions/submit.php". В этом файле сразу после 136-ой строки (после блока кода: 
$comment = array(
'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);
}
}
  Здесь мы смотрим включена ли капча и если включена, то проверяем правильно ли она разгадана, если да, то добавляем комментарий, если нет то выбрасываем сообщение об ошибке.Теперь смотрим в админеке комментариев в опциях должен появиться параметр «Показывать капчу гостям» и если вы его включите то для всех кто не зарегистрировался при попытке добавить комментарий будет выводиться капча.Архив с готовым компонентом здесь. 
+1
10:35
RSS
Гость
14:38
нормуль
Гость
14:47
+1 за старания!
Гость
16:22
пробовал у себя на сайте, не срабатывает почему то условие: если не поставил капчу, итог комментарий записывается а сообщение об ошибке не высвечивается
Версия какая?
Гость
09:05
Комментарий удален
И проверьте в админке компонента Комментарии опцию «Показывать капчу гостям» если опция не включена, то никакой капчи выводиться для гостей не будет.
Гость
16:16
да, я посмотрел отличие только в файле submit.php, одна строчка добавилась, ну теперь предупреждающее сообщение выдает
Гость
11:40
Спасибо, очень полезная статья. Интересно почему ее нет в коробке? Имею ввиду капчу для гостей. Нелогично однако…
Я все же надеюсь что займутся комплектацией ветки, компонентов очень мало еще.
02:58
+1
Круто!!!
Загрузка...