0 Пользователей и 1 Гость просматривают эту тему.
  • 5 Ответов
  • 1674 Просмотров
*

volk-beaver

  • Новичок
  • 1
  • 0 / 0
На сайте разработчика плагина LLKcaptcha (основанного на проекте KCAPTCHA) есть инструкция по внедрению этого плагина в компоненты Joomla. Следуя этой инструкции, я попытался прикрутить показ CAPTCHA к комментариям компонента K2, однако у меня это получилось не полностью. Сам вывод CAPTCHA удалось прикрутить к форме отправки комментариев при помощи внесения кода в этот файл: ../components/com_k2/templates/default/item_comments_form.php. Пример кода:

Код
<?php
$plugin = JFactory::getApplication()->getParams()->get('captcha', JFactory::getConfig()->get('captcha'));                                                          
$name='my_name';
$id='my_id';
$class='my_class';
if ($plugin === 0 || $plugin === '0' || $plugin === '' || $plugin === null)
{
      return '';
}
else
{
      if (($captcha = JCaptcha::getInstance($plugin)) == null)
      {
            return '';
      }
}
echo $captcha->display($name, $id, $class);                                                          
?>



А вот код проверки ввода CAPTCHA куда только не вставлял, но так и не смог добиться результата. Комментарии отправлялись вне зависимости от того, что было (или не было) введено в поле проверки CAPTCHA. Пример кода (на сайте разработчика плагина в коде была, по всей видимости, пропущена одна фигурная скобка; прокомментирую в том месте, куда её добавил):

Код
<?php
$plugin = JFactory::getApplication()->getParams()->get('captcha', JFactory::getConfig()->get('captcha'));
if ($plugin === 0 || $plugin === '0' || $plugin === '' || $plugin === null)
{
     return '';
}
else
{
     if (($captcha = JCaptcha::getInstance($plugin)) == null)
     {
            return '';
     }
// Скорее всего именно здесь была пропущена скобка
}
$captcha->CheckAnswer('');
?>

В общем, буду благодарен, если кто-нибудь поможет объяснить, как заставить работать этот плагин в комментариях компонента К2. Мои попытки производились в среде Joomla 3.1.1 и K2 v2.6.7. Кстати, сразу скажу, что особо в PHP не разбираюсь. Спасибо.

В общем, пообщался я с разработчиками этого плагина и они любезно предоставили решение. Описание на сайте.
« Последнее редактирование: 16.07.2013, 03:42:12 от volk-beaver »
*

llsoftby

  • Новичок
  • 2
  • 1 / 0
Добрый день.
Продублирую ответ здесь, возможно, кому-то пригодится.

Итак, интеграция LLKcaptcha в компоненте K2 (комментарии)


1) Вставить в com_k2/templates/default/item_comments_form.php код:

$plugin = JFactory::getApplication()->getParams()->get('captcha', JFactory::getConfig()->get('captcha'));                                                     

$name='my_name';

$id='my_id';

$class='my_class';

 

if ($plugin === 0 || $plugin === '0' || $plugin === '' || $plugin === null) {

      return '';

 } else {

          if (($captcha = JCaptcha::getInstance($plugin)) == null) {

               return '';

           }

     }

echo $captcha->display($name, $id, $class);

2) В \components\com_k2\controllers\item.php by заменяем существующую функцию function comment()  на:

    function comment(){
        $plugin    = JFactory::getApplication()->getParams()->get('captcha', JFactory::getConfig()->get('captcha'));

       if ($plugin === 0 || $plugin === '0' || $plugin === '' || $plugin === null) {

         return '';

        } else {

         if (($captcha = JCaptcha::getInstance($plugin)) == null) {

              return '';

          }
    }
    if($captcha->CheckAnswer('')) {
                $model = $this->getModel('item');
                $model->comment();
            } else {
                  $mainframe = JFactory::getApplication();
                    JLoader::register('Services_JSON', JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'lib'.DS.'JSON.php');
                    $json = new Services_JSON;
                    $response = new JObject();
                    $response->set('message','Wrong captcha value. Please, refresh captcha'); //
                    //$response->set('refresh',1);   //to refresh page (after AJAX answer)
                    echo $json->encode($response);
                    $mainframe->close();
            }
   
    }

Подробные инструкции смотрите здесь http://www.llsoft.by/joomla-customization/llkcaptchahowto.
*

AzaLeo

  • Захожу иногда
  • 76
  • 2 / 0
Тема как раз очень пригодилась, спасибо автору. Но есть проблема: каким образом убрать каптчу от зарегистрированные пользователей? Пробовал условием в выводе, но я так понимаю, что создается сессия и ее нужно или как-то убрать или обработать, потому что комментарии все равно не добавляются без ввода кода.
*

AzaLeo

  • Захожу иногда
  • 76
  • 2 / 0
Разобрался. Нужно условие внутри самой функции сделать. Если кому пригодится, то код, который нужно вставить в item.php, должен быть таким:

Код: php
    function comment(){
$user = &JFactory::getUser();
if ($user->guest)
{
         $plugin    = JFactory::getApplication()->getParams()->get('captcha', JFactory::getConfig()->get('captcha'));

       if ($plugin === 0 || $plugin === '0' || $plugin === '' || $plugin === null) {

         return '';

        } else {

         if (($captcha = JCaptcha::getInstance($plugin)) == null) {

              return '';

          }
     }
     if($captcha->CheckAnswer('')) {
                 $model = $this->getModel('item');
                 $model->comment();
             } else {
                   $mainframe = JFactory::getApplication();
                     JLoader::register('Services_JSON', JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'lib'.DS.'JSON.php');
                     $json = new Services_JSON;
                     $response = new JObject();
                     $response->set('message','Wrong captcha value. Please, refresh captcha'); //
                     //$response->set('refresh',1);   //to refresh page (after AJAX answer)
                     echo $json->encode($response);
                     $mainframe->close();
             }
}
else
{
$model = &$this->getModel('item');
$model->comment();
}
}
*

llsoftby

  • Новичок
  • 2
  • 1 / 0
Добрый день.

Да, можно проверять Вашим способом и выводить (проверять) каптчу только для гостей.
Для удобства, чтобы каждый раз не лазить в код и ставить доп. проверки, обновилась версия llkcaptcha, где добавлен параметр, отвечающий для отображения CAPTCHA: для всех или только для гостей. Скачать можно на нашем сайте.
http://llsoft.by/joomla-customization/llkcaptcha.

С Уважением,
ЛЛСОФТ
*

AzaLeo

  • Захожу иногда
  • 76
  • 2 / 0
Уважаемые разработчики, CAPTCHA перестала защищать комментарии К2 от спама. Приходится усложнять конфигурацию отображения CAPTCHA. Для людей стало сложно проходит проверку, а вот спам все равно проскакивает несколько раз в день. Что-то можно предпринять?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Решено: Более одной группы доп. полей

Автор chilly_bang

Ответов: 75
Просмотров: 9140
Последний ответ 07.02.2022, 17:06:11
от Dobrota
[Решено] K2 не сохраняет настройки

Автор Dobrota

Ответов: 2
Просмотров: 1429
Последний ответ 07.02.2022, 15:58:04
от Dobrota
Перестала работать опция оценки материалов/рейтинг в компоненте K2

Автор Yonakano

Ответов: 4
Просмотров: 1348
Последний ответ 07.02.2021, 00:30:57
от Yonakano
Ошибка ПРИ создании материала В К2 - РЕШЕНО

Автор korchaga

Ответов: 1
Просмотров: 626
Последний ответ 28.12.2020, 03:21:46
от korchaga
Не отображается Captcha v2 в компоненте K2 2.10.3 Joomla 2.5

Автор Александр Кардаш

Ответов: 4
Просмотров: 809
Последний ответ 30.07.2020, 12:27:47
от Александр Кардаш