Новости Joomla

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

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
recaptcha в модуль встроить
« : 14.06.2019, 21:06:20 »
Пытаюсь вставить recaptcha в контактную форму, но не отображается

в файл шаблона модуля вставляю
Код
JHtml::_('behavior.keepalive');

ниже

Код
<?php 
  JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
$dispatcher->trigger('onInit','dynamic_recaptcha_1');
?>

и ниже в саму форму

Код
<div id="dynamic_recaptcha_1"></div>

в mod_contact.php вставил

Код
$post = JRequest::get('post');     
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
$captcha = $dispatcher->trigger('onCheckAnswer',$post['recaptcha_response_field']);
if ($captcha[0] == false) {
    echo 'false';
} else {
    echo 'true';

Подскажите пожалуйста что не так сделал? За помощь заплачу 200 руб.
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #1 : 14.06.2019, 21:39:30 »
в файл шаблона модуля вставляю
Код
 if ($captchaEngine == 'recaptcha') {
    JPluginHelper::importPlugin('captcha');
    $dispatcher = JDispatcher::getInstance();
    $dispatcher->trigger('onInit','dynamic_recaptcha_1');
    $recaptcha = $dispatcher->trigger('onDisplay', array(null, 'dynamic_recaptcha_1', 'class=""'));
и ниже в саму форму
Код
<div id="comments-form-captcha-holder">
  <?php echo (isset($recaptcha[0])) ? $recaptcha[0] : ''; ?>
</div>
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #2 : 14.06.2019, 22:13:35 »
Код
 if ($captchaEngine == 'recaptcha') {
    JPluginHelper::importPlugin('captcha');
    $dispatcher = JDispatcher::getInstance();
    $dispatcher->trigger('onInit','dynamic_recaptcha_1');
    $recaptcha = $dispatcher->trigger('onDisplay', array(null, 'dynamic_recaptcha_1', 'class=""'));
Код
<div id="comments-form-captcha-holder">
  <?php echo (isset($recaptcha[0]))? $recaptcha[0] : ''; ?>
</div>

Ну в вашем примере с if ($captchaEngine == 'recaptcha') {     вы забыли закрывающую кавычку, как я понимаю, или ошибаюсь?
в любом случаем капча появилась только если убрать строку if ($captchaEngine == 'recaptcha') {
если эту строку оставить выдает

Notice: Undefined variable: captchaEngine in /var/www/.....

если без if ($captchaEngine == 'recaptcha') {  - то да, капча появилась но не "капчит", т.е. форма отправляется и без нее.
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #3 : 14.06.2019, 22:18:03 »
это вы привели кусок кода из примера в интернете как вставить капчу в jcomments как я понял.
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #4 : 15.06.2019, 06:41:16 »
если без if ($captchaEngine == 'recaptcha') {  - то да, капча появилась но не "капчит", т.е. форма отправляется и без нее.
Ну да, удалите  проверку.
это вы привели кусок кода из примера в интернете как вставить капчу в jcomments
Да, но главное что рекапча появилась. Или что то смущает ?
в mod_contact.php
Код
  $post = JRequest::get('post');  
  JPluginHelper::importPlugin('captcha');
  $dispatcher = JDispatcher::getInstance();
  $result = $dispatcher->trigger('onCheckAnswer', $post['recaptcha_response_field']);
  $response->addScript('grecaptcha.reset();');
 
  if (!in_array(true, $result, true)) {
    return $response;
  }
п.с.
И если заработает код, то деньги перечислите в фонд форума.
« Последнее редактирование: 15.06.2019, 09:30:37 от draff »
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #5 : 15.06.2019, 09:51:51 »
Спасибо, я проверю если заработает я деньги вам перечислю, не вопрос, кидайте яндекс кошелек или карту в личку.

и вопрос

<div id="comments-form-captcha-holder">   этот id можно сменить на любой, или он привязан к коду проверки?
« Последнее редактирование: 15.06.2019, 10:00:13 от Mehanick »
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #6 : 15.06.2019, 10:18:41 »
<div id="comments-form-captcha-holder">   этот id можно сменить на любой
можно заменить.
я проверю если заработает я деньги вам перечислю, не вопрос, кидайте Яндекс кошелек или карту в личку.
п.с.
И если заработает код, то деньги перечислите в фонд форума.
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #7 : 15.06.2019, 10:25:35 »
JHtml::_('behavior.keepalive');

Подскажите пожалуйста это нужно вставлять в шаблон модуля? как я понимаю строка подгружает js-скрипт Google капчи

<script src='https://www.google.com/recaptcha/api.js'></script>

или ошибаюсь?
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #8 : 15.06.2019, 11:05:43 »
Подскажите пожалуйста это нужно вставлять в шаблон модуля?
Для рекапча не нужно.
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #9 : 15.06.2019, 11:34:48 »
Попробовал, капча показалась, но после добавления в mod_contact.php

Код
$post = JRequest::get('post');  
  JPluginHelper::importPlugin('captcha');
  $dispatcher = JDispatcher::getInstance();
  $result = $dispatcher->trigger('onCheckAnswer', $post['recaptcha_response_field']);
  $response->addScript('grecaptcha.reset();');
 
  if (!in_array(true, $result, true)) {
    return $response;
  }

страницу сайта выкинуло с ошибкой 0 - Пустое значение CAPTCHA недопустимо.
« Последнее редактирование: 15.06.2019, 12:00:54 от Mehanick »
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #10 : 15.06.2019, 11:35:28 »
возможно с этой страницы еще чтото взять нужно?

https://raboj.su/блог/21-joomla/109-joomla-integriruem-recaptcha-v2-no-captcha-v-jcomments.html
« Последнее редактирование: 15.06.2019, 12:02:46 от Mehanick »
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #11 : 15.06.2019, 12:06:23 »
страницу сайта выкинуло с ошибкой 0 - Пустое значение CAPTCHA недопустимо.
Значит не пришло значение инпута с формы.
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #12 : 15.06.2019, 12:14:25 »
какого инпута? вообще сайт не открывается с ошибкой

0 - Пустое значение CAPTCHA недопустимо.

Может код в helper нужно вставлять? где идет прием данных с формы
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #13 : 15.06.2019, 12:25:25 »
Тогда добавить проверку
Код
$post = JRequest::get('post'); 
if(empty($post['recaptcha_response_field'])) return; // Проверка на пустое значение инпута  рекапча
  JPluginHelper::importPlugin('captcha');
  $dispatcher = JDispatcher::getInstance();
  $result = $dispatcher->trigger('onCheckAnswer', $post['recaptcha_response_field']);
  $response->addScript('grecaptcha.reset();');
 
  if (!in_array(true, $result, true)) {
    return $response;
  }
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #14 : 15.06.2019, 12:27:10 »
ща заценим
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #15 : 15.06.2019, 12:37:11 »
нет, не пашет ни в главном php модуля ни в helper

Первый ваш вариант

$post = JRequest::get('post'); 
  JPluginHelper::importPlugin('captcha');
  $dispatcher = JDispatcher::getInstance();
  $result = $dispatcher->trigger('onCheckAnswer', $post['recaptcha_response_field']);
  $response->addScript('grecaptcha.reset();');
 
  if (!in_array(true, $result, true)) {
    return $response;
  }

выдавал ошибку 0 - Пустое значение CAPTCHA недопустимо в mod_contact.php, переместил в helper там другие ошибки

Notice: Undefined index: recaptcha_response_field in /var/www/.....
RuntimeException: invalid-keys

Хотя ключи правильные
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #16 : 15.06.2019, 12:39:22 »
вобщем я сделал -все работает, но вставил другим способом напрямую по инструкции с офсайта и сделал обработчик в helper.

Все шоколадно, уже потестил, супер.

Но хотелось бы применить ваше решение через api Joomla, а оно к сожалению не работает. Может не туда код вставляю.
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #17 : 15.06.2019, 12:45:37 »
Хотя ключи правильные
При ошибке в проверке ключей на домен, не выводит рекапчу от Google. А если проверить что вообще пришло, может firewall блочит
Код
$post = JRequest::get('post');
echo "<pre>";var_dump($post);echo "</pre>";
if(empty($post['recaptcha_response_field'])) return;
Ну и ладно,может кто то доделают и найдет причину ошибки
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #18 : 15.06.2019, 13:27:52 »
Вобщем вот мое решение, работает, может кому-то пригодится

в файл шаблона модуля

Код
JPluginHelper::importPlugin('captcha');
   $dispatcher = JDispatcher::getInstance();
    $dispatcher->trigger('onInit','dynamic_recaptcha_1');

ниже в форму

Код
<div class="g-recaptcha" data-sitekey="ваш публичный ключ"></div>

в helper

Код
if(isset($_POST['g-recaptcha-response'])) {
   
    $captcha = $_POST['g-recaptcha-response'];
    $ip = $_SERVER['REMOTE_ADDR'];
    $key = 'ваш секретный ключ';
    $recaptcha_response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$key.'&response='.$captcha.'&remoteip='.$ip);
    $data = json_decode($recaptcha_response);

    if(isset($data->success) &&  $data->success === true) {
        //Код если капча пройдена
        echo 'Пройдена';
    }
    else {
       //Код, если капча не пройдена
   echo 'Не пройдена';
    }
}

Идет проверка напрямую через сервер гугл.
« Последнее редактирование: 15.06.2019, 13:32:51 от Mehanick »
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #19 : 15.06.2019, 13:30:41 »
Но хотел бы попросить помощи у знающих людей, работать то работает, но в консоли висит ошибка даже когда фотма еще не отправлена.

Код
Uncaught Error: reCAPTCHA has already been rendered in this element
    at Object.nU (recaptcha__ru.js:604)
    at window.JoomlaInitReCaptchaInvisible (recaptcha.min.js?a0b983549dab8718b0e7d08cc79054de:1)
    at aQ (recaptcha__ru.js:608)
    at xE (recaptcha__ru.js:606)
    at recaptcha__ru.js:613
    at recaptcha__ru.js:633

Ошибка в консоли не есть хорошо, может кто-то поможет ее убрать, и получилось бы отличное решение.
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Re: recaptcha в модуль встроить
« Ответ #20 : 15.06.2019, 18:26:27 »
Ошибка в консоли
проверьте ключи для домена
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
Re: recaptcha в модуль встроить
« Ответ #21 : 15.06.2019, 18:42:54 »
немного оффтопа.
по-моему, на большинстве сайтов контактная форма уже не нужна, ибо ставится лайвчат, который её полностью замещает, если не нужна отправка файлов.
я интереса для поставил на сайт клиента всплывающую форму, в которой первое скрытое поле заполняется по клику на кнопку, вызывающую форму + одно "медовое" поле под ввод электронки, которое перекрыто реальным полем ввода.
на сервере делается простая проверка на заполнение этих полей.
в итоге за полгода ни одного спам-письма, без всяких рекапч.
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Re: recaptcha в модуль встроить
« Ответ #22 : 15.06.2019, 19:08:09 »
проверьте ключи для домена
Если плагином то капча выводится, значит ключи правильные. Скорее всего плагин и код в модуле грузят рекапчу 2 раза.
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #23 : 15.06.2019, 22:45:17 »
немного оффтопа.
по-моему, на большинстве сайтов контактная форма уже не нужна, ибо ставится лайвчат, который её полностью замещает, если не нужна отправка файлов.
я интереса для поставил на сайт клиента всплывающую форму, в которой первое скрытое поле заполняется по клику на кнопку, вызывающую форму + одно "медовое" поле под ввод электронки, которое перекрыто реальным полем ввода.
на сервере делается простая проверка на заполнение этих полей.
в итоге за полгода ни одного спам-письма, без всяких рекапч.

Я тоже в моем модуле форм сделал скрытое допполе емайл и проверку на него, если заполнено то форма не отправляет. Но на некоторых сайтах все равно спам идёт, обходят эту защиту, арифметические действия тоже обходят, на собственном опыте убедился.
Как понял самое надёжное рекапча, вот и пытаюсь ее добавить.
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: recaptcha в модуль встроить
« Ответ #24 : 15.06.2019, 22:54:21 »
data-sitekey="ваш публичный ключ" - это и даёт ошибку в консоли, ключ указывается в плагине. А так идёт попытка второй раз рекапчу подгрузить.
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #25 : 15.06.2019, 23:43:57 »
Спасибо, попробую исправить

<div class="g-recaptcha" data-sitekey="ваш публичный ключ"></div>

То есть насколько понял в моем случае из этой строки нужно убрать data-sitekey="ваш публичный ключ"
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Re: recaptcha в модуль встроить
« Ответ #26 : 16.06.2019, 11:03:59 »
Думаю можно весь div убрать
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #27 : 16.06.2019, 11:11:49 »
ну весь div убрал и капча убралась, убрал из дива только data-sitekey="ваш публичный ключ" - аналогично капча убралась. Да и как без дива-то? что тогда вместо него вписывать? он как понимаю указывает место где будет стоять капча.

Ключи все правильные, на странице регистрации капча прекрасно работает без ошибок в консоли.

Помогите поправить код чтобы ошибка исчезла, или лучший вариант кода, заплачу денюжку.
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #28 : 16.06.2019, 11:23:27 »
Ну вощим я включил мозг и починил

получалось этот код

JPluginHelper::importPlugin('captcha');
   $dispatcher = JDispatcher::getInstance();
    $dispatcher->trigger('onInit','dynamic_recaptcha_1');

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

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

все теперь работает и без ошибок
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
Re: recaptcha в модуль встроить
« Ответ #29 : 16.06.2019, 11:25:10 »
что в итоге получилось

в файл шаблона модуля

Код
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

ниже в форму

Код
<div class="g-recaptcha" data-sitekey="ваш публичный ключ"></div>

в helper

Код
if(isset($_POST['g-recaptcha-response'])) {
   
    $captcha = $_POST['g-recaptcha-response'];
    $ip = $_SERVER['REMOTE_ADDR'];
    $key = 'ваш секретный ключ';
    $recaptcha_response = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$key.'&response='.$captcha.'&remoteip='.$ip);
    $data = json_decode($recaptcha_response);

    if(isset($data->success) &&  $data->success === true) {
        //Код если капча пройдена
        echo 'Пройдена';
    }
    else {
       //Код, если капча не пройдена
   echo 'Не пройдена';
    }
}

Все работает.

Это общий вариант думаю подойдет для всех сайтов, не только на Joomla.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Отредактировать модуль меню под bootstrap 4

Автор si@m

Ответов: 1
Просмотров: 476
Последний ответ 26.03.2021, 15:51:13
от gartes
reCAPTCHA+jcomments

Автор sega

Ответов: 3
Просмотров: 649
Последний ответ 22.04.2020, 20:11:34
от wishlight
Сделать/найти установить модуль на Joomla 3

Автор bonefacei

Ответов: 1
Просмотров: 582
Последний ответ 12.04.2020, 06:28:37
от draff
Модуль/Плагин вывода данных

Автор NightlyBlooD

Ответов: 3
Просмотров: 594
Последний ответ 30.03.2020, 15:15:23
от NightlyBlooD
Доработать модуль Joomla

Автор KatrinZ

Ответов: 3
Просмотров: 770
Последний ответ 29.11.2019, 23:21:06
от zazar