Добавляем капчу в комментарии

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

#1 20 апреля 2016 в 10:52
Здравствуйте! Решил сделать обзорную статья как добавить компонент recapcha в комментарии для гостей в Instant CMS2. Давайте пожалуй начнём.

1. Открываем файл по пути "/system/languages/ru/controllers/comments/comments.php". После шестой строки:
  1. define('LANG_COMMENTS_OPT_IS_GUESTS_HINT', 'Незарегистрированные пользователи смогут добавлять комментарии');
вставляем ещё две строки:
  1. define('LANG_COMMENTS_CAPCHA_FOR_GUESTS', 'Показывать капчу гостям');
  2. define('LANG_COMMENTS_CAPCHA_FOR_GUESTS_HINT', 'Отображать капчу при добавлении комментариея гостем чтобы избежать спама в комментариях');
Дальше открываем файл по пути "/system/languages/en/controllers/comments/comments.php". После шестой строки:
  1. define('LANG_COMMENTS_OPT_IS_GUESTS_HINT', 'Not registered users will be able to add comments');
вставляем две строки:
  1. define('LANG_COMMENTS_CAPCHA_FOR_GUESTS', 'Show CAPTCHA for guests');
  2. 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 строки(после блока
  1. new fieldCheckbox('is_guests', array(
  2. 'title' => LANG_COMMENTS_OPT_IS_GUESTS,
  3. 'hint' => LANG_COMMENTS_OPT_IS_GUESTS_HINT,
  4. )),
) вставляем вот такой код:
  1. new fieldCheckbox('capcha_for_guests', array(
  2. 'title' => LANG_COMMENTS_CAPCHA_FOR_GUESTS,
  3. 'hint' => LANG_COMMENTS_CAPCHA_FOR_GUESTS_HINT,
  4. )),
Этим мы добавляем новую опцию в админке комментариев.

3. Теперь идём в файл "/templates/имя_используемого_шаблона(исходный шаблон — default)/controllers/comments/list.tpl.php". После шестой строки:
  1. <?php $is_karma_allowed = $user->is_logged && !cmsUser::isPermittedLimitHigher('comments', 'karma', $user->karma); ?>
вставляем строки:
  1. <?php $captcha_for_guests = cmsEventsManager::hook('captcha_html'); ?>
  2. <?php $enable_capcha = !empty($this->controller->options['capcha_for_guests']); ?>
и в этом же файле после 98-ой строки:
  1. <?php echo $user->is_logged ? html_editor('content') : html_textarea('content'); ?>
вставляем код:
  1. <?php if (!$user->is_logged && $enable_capcha)
  2. {
  3. echo $captcha_for_guests;
  4. } ?>
Здесь мы прописываем что если выбрана опция "Показывать гостям капчу" то для всех гостей при добавлении показывать капчу.

4. Теперь открываем файл "/system/controllers/comments/actions/submit.php". В этом файле сразу после 136-ой строки (после блока кода:
  1. $comment = array(
  2. 'user_id' => $user->id,
  3. 'parent_id' => $parent_id,
  4. 'target_controller' => $target_controller,
  5. 'target_subject' => $target_subject,
  6. 'target_id' => $target_id,
  7. 'content' => $content,
  8. 'content_html' => $content_html,
  9. 'author_url' => $user->ip
  10. );
Вставляем вот такой код:
  1. if (!$user->is_logged && $enable_capcha)
  2. {
  3. $is_captcha_for_comments_valid = cmsEventsManager::hook('captcha_validate', $this->request);
  4. if (!$is_captcha_for_comments_valid)
  5. {
  6. $result_capcha_invalid = array(
  7. 'error' => 'capcha_invalid',
  8. 'message' => LANG_CAPTCHA_ERROR
  9. );
  10. $template->renderJSON($result_capcha_invalid);
  11. }
  12. }
Здесь мы смотрим включена ли капча и если включена, то проверяем правильно ли она разгадана, если да, то добавляем комментарий, если нет то выбрасываем сообщение об ошибке.

Теперь смотрим в админеке комментариев в опциях должен появиться параметр "Показывать капчу гостям" и если вы его включите то для всех кто не зарегистрировался при попытке добавить комментарий будет выводиться капча. Демо здесь, recapcha для гостей включена.

Архив с обновлёнными файлами для добавления рекапчи в комментарии. Работает на 2.5.0-2.5.1 с другими версиями не тестился, чтобы установить просто извлекаем всё из архива в корень сайта с заменой предварительно сделав бэкап.
#2 20 апреля 2016 в 11:49
Это как я понял для 2 ветки?
#3 20 апреля 2016 в 12:39
Михаил, как реализовать подобное для объявлений? Может подскажете, очень нужно.
#4 20 апреля 2016 в 12:57


Это как я понял для 2 ветки?

Заралик

Да, для 2 ветки.

Михаил, как реализовать подобное для объявлений? Может подскажете, очень нужно.

Pasechnik

Для 1-й ветки?
#5 20 апреля 2016 в 13:38

Для 1-й ветки?

Михаил
Видимо что-то упустил. smileДля 2-й реализовано по умолчанию?
#6 20 апреля 2016 в 13:48

Видимо что-то упустил. Для 2-й реализовано по умолчанию?

Pasechnik
Моё решение написано для компонента комментарии во второй ветке ICMS
#7 20 апреля 2016 в 13:53

Моё решение написано для компонента комментарии во второй ветке ICMS

Михаил
Для второй ветки нужно, при добавлении объявлений гостями.
#8 20 апреля 2016 в 17:11


Видимо что-то упустил. Для 2-й реализовано по умолчанию?

Pasechnik
Моё решение написано для компонента комментарии во второй ветке ICMS

Михаил
Работа отличная! Но вот будет ли что то для ё ветки? По поводу добавления капчи в объявления тоже отлично!
#9 22 апреля 2016 в 10:21



Видимо что-то упустил. Для 2-й реализовано по умолчанию?

Pasechnik
Моё решение написано для компонента комментарии во второй ветке ICMS

Михаил
Работа отличная! Но вот будет ли что то для ё ветки? По поводу добавления капчи в объявления тоже отлично!

Заралик

Смотря что необходимо. Может найду время сделаю.
#10 2 ноября 2016 в 23:36
Все сделал, как описано. Не работает на 2.5.1. Капча для гостей выводится, но если ее вообще проигнорировать, т.е. ввести имя, набрать текст комментария и нажать "Отправить", комментарий добавляется, как будто бы капчи и нет вообще.
#11 1 августа 2018 в 11:46

Все сделал, как описано. Не работает на 2.5.1. Капча для гостей выводится, но если ее вообще проигнорировать, т.е. ввести имя, набрать текст комментария и нажать "Отправить", комментарий добавляется, как будто бы капчи и нет вообще.

al955
Аналогично
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.