Authorization

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

MM Web Studio Group

Добавляем капчу для гостей в комментарии на InstantCMS 2.5
Здравствуйте! Решил сделать обзорную статья как добавить компонент 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. is_logged && !cmsUser::isPermittedLimitHigher('comments', 'karma', $user->karma); ?>

 
вставляем строки: 

  1. controller->options['capcha_for_guests']); ?>

 
и в этом же файле после 98-ой строки: 
  1. is_logged ? html_editor('content') : html_textarea('content'); ?>

 
вставляем код: 
  1. 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. }

 
 
Здесь мы смотрим включена ли капча и если включена, то проверяем правильно ли она разгадана, если да, то добавляем комментарий, если нет то выбрасываем сообщение об ошибке.Теперь смотрим в админеке комментариев в опциях должен появиться параметр «Показывать капчу гостям» и если вы его включите то для всех кто не зарегистрировался при попытке добавить комментарий будет выводиться капча.
Архив с готовым компонентом здесь.
 
+1
09:35
RSS
Гость
13:38
нормуль
Гость
13:47
+1 за старания!
Гость
15:22
пробовал у себя на сайте, не срабатывает почему то условие: если не поставил капчу, итог комментарий записывается а сообщение об ошибке не высвечивается
Версия какая?
Гость
08:05
2.5.1
Comment deleted
И проверьте в админке компонента Комментарии опцию «Показывать капчу гостям» если опция не включена, то никакой капчи выводиться для гостей не будет.
Гость
15:16
да, я посмотрел отличие только в файле submit.php, одна строчка добавилась, ну теперь предупреждающее сообщение выдает
Гость
10:40
Спасибо, очень полезная статья. Интересно почему ее нет в коробке? Имею ввиду капчу для гостей. Нелогично однако…
Я все же надеюсь что займутся комплектацией ветки, компонентов очень мало еще.
01:58
+1
Круто!!!
Loading...