[Решено] Использование встроенной в J3 recaptcha в собственных формах

  • 4 Ответов
  • 289 Просмотров

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

*

Оффлайн AlekVolsk

Собственно, сабж. Как?

Есть штатный тип поля captcha, но если его объявить в форме, то выводится он как простое текстовое поле. Что нужно для нормального вывода и функционирование CAPTCHA?
Плагин включен, ключи указаны, версия 2
« Последнее редактирование: 16.03.2016, 09:57:24 от b2z »

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit
Странно. Должно выводится без танцев с бубном. В com_users же работает.

P.S.
У себя пока не приходилось использовать.

*

Оффлайн AlekVolsk

в com_users выводятся все поля в цикле, берутся из XML, может плагин срабатывает при как раз рендере из XML?
у меня в частности модуль, простая форма обратной связи

*

Оффлайн AlekVolsk

в общем, если понял правильно, поля, описанные в /libraries/cms/form/field/, рендерятся только изнутри JForm, который вызывается при построении форм в компонентах
если инпут прописывать в шаблоне вида напрямую, то поля из /libraries/cms/form/field/ не рендерятся

вопрос: как в модуле, без использования компонента, построить форму с использованием XML и JForm? или я в очередной раз изобретаю велосипед на 10 колесах?

*

Оффлайн AlekVolsk

Решение, найденное с помощью Istaan:

1) форма (тег form) должна обязательно иметь атрибут name

2) в шаблоне вида пишем:
Код: (php) [Выделить]
<?php
$captcha_plugin 
JFactory::getApplication()->getParams()->get('captcha'JFactory::getConfig()->get('captcha'));
if ((
$captcha_field JCaptcha::getInstance($captcha_plugin, array('namespace' => 'имя формы (содержимое атрибута name тега form)')))!= null)
echo $captcha_field->display('captcha''id поля''класс поля (необязателен)');
?>

3) там, где обрабатываем результаты формы (хелпер модуля в моем случае) пишем в самом начале, сразу после проверки сессионного токена:
Код: (php) [Выделить]
$captcha_plugin = JFactory::getApplication()->getParams()->get('captcha', JFactory::getConfig()->get('captcha'));
$captcha_result = JCaptcha::getInstance($captcha_plugin)->checkAnswer($input->getString('g-recaptcha-response'));
if (!$captcha_result) {
// тут вывод сообщения об ошибке
return;
}

Решено.
« Последнее редактирование: 16.03.2016, 03:23:58 от AlekVolsk »