Тема довольно интересная: Как в 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.

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

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

https://fin32.com/ru/4slovo.ru
# https://fin32.com/ru/4slovo.ru 09.09.2018 16:22
Спасибо за информацию