Тема довольно интересная: Как в Joomla использовать ReCapcha через php?. В стандартном компоненте материалов recapcha включается через админку. Все просто и удобно. Но как заюзать ее в своем кастомном компоненте или форме. 

 

Некто ggppdk подсказал

В форме добавляем капчу таким кодом:

$captcha_field_html = '';

// Use configured captcha plugin
if ( $c_plugin = JFactory::getApplication()->getCfg('captcha') )
{
    // Try to load the configured captcha plugin, (check if disabled or uninstalled)
    // Joomla will enqueue an error message if needed
    $captcha_obj = JCaptcha::getInstance($c_plugin, array('namespace' => 'my_component_form'));

    $captcha_field_html = $captcha_obj  ?
        $captcha_obj->display('captcha_field_name', 'captcha_tag_id', ' captcha_outer_class ')  :
        '' ;
}

А в контроллере проверяем присланные данные так:

// ** Extra validation for manually added captcha
// Use configured captcha plugin
if ( $c_plugin = JFactory::getApplication()->getCfg('captcha') ) 
{
    // Get captcha value
    $c_value = $app->input->get('captcha_field_name', null, 'STRING');

    // Get captch object instance
    $captcha_obj = JCaptcha::getInstance($c_plugin, array('namespace' => 'my_component_form'));

    // Validate catcha
    if (!$captcha_obj->checkAnswer($c_value))
    {
        // Get the captcha validation message and push it out to the user
        // but default error message is not good ? maybe use custom here
        $error = $captcha_obj->getError();
        $app->enqueueMessage($error instanceof Exception ? $error->getMessage() : $error, 'error');

        // Set POST form data into the session, so that they get reloaded
        $app->setUserState($form->option.'.edit.'.$form->context.'.data', $data);

        // Redirect back to the component form
        $this->setRedirect( '...' );
        return false;
    }
}

Тут надо не забыть включить и настроить плагин рекапчи в управлении плагинами, а потом в общих настройках выбрать его, в качестве капчи по умолчанию. 

От себя добавлю, что обычно еще до отправки формы нужно проверить ее валидность. На js мой вод выглядит так:

if (!grecaptcha.getResponse(0)) {
    $('.recapcha').addClass("has_error");
    return false;
}

Где 0 это индекс той рекапчи которую вы проверяете в данный момент (на случай если на странице несколько форм). Если форма одна то можно этот параметр вообще не указывать. Собственно метод ничего не проверяет, просто заполнили ли вы капчу или нет. Можно засунуть этот код в onsubmit.

Вроде все, всем удачи!

Рассказать друзьям
author.jpg

Платная консультация по вопросам 1500 руб/час

Прочитали статью и остались вопросы? Меня зовут Валерий и я её автор. С радостью объясню Вам в скайпе все затруднительные моменты, которые остались за рамками статьи!

Подробнее ...

Добавить комментарий


Комментарии   

https://fin32.com/ru/4slovo.ru
0 # https://fin32.com/ru/4slovo.ru 09.09.2018 16:22
Спасибо за информацию
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Сергей Крым
0 # Сергей Крым 30.01.2020 13:52
Супер информация, было още более полезнее для джумловодов если пример кода был на основе например формы авторизации. На формы обратной связи капча уже стоит, а вот на авторизацию на лицевой части, равно как на админке - не стоит.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору
Сергей Крым Ялта
0 # Сергей Крым Ялта 30.01.2020 13:57
Супер информация, было още более полезнее для джумловодов если пример кода был на основе например формы авторизации. На формы обратной связи капча уже стоит, а вот на авторизацию на лицевой части, равно как на админке - не стоит.
Ответить | Ответить с цитатой | Цитировать | Сообщить модератору