Писать на форуме DIAFAN.CMS могут только зарегистрированные пользователи. Войдите или зарегистрируйтесь.

Форум Сайт на DIAFAN.CMS Вопросы от новичков reCaptcha и форма заказа в 1 клик


Дмитрий Суворов (trololo7lol) 3 августа, редакция 3 августа

Здравствуйте!
Как добавить reCaptcha для всплывающей формы заказа в 1 клик?
На данный момент у меня получилось ее вывести, но она живет своей жизнью :)
DIAFAN версия 6.0.9.0

Что я делал.

В файле: /modules/cart/cart.model.php
Запросил в функции form_param() капчу:
Код
$this->result["captcha"] = $this->diafan->_captcha->get('cart_one_click');


Вывел ее файле /custom/my/modules/cart/views/cart.view.one_click.php
Под полями:
Код
echo '<div class="control">' . $result['captcha'] . '</div>';


Куда копать дальше?

Александр (capitan) 1094 августа, редакция 4 августа

ну надо включить капчу для модуля shop в настройках.

в таблицу {config} надо добавить запись (но это не точно ):

Код
module_name: cart
name: captcha
lang_id: 0
value: 1
site_id: 0


Или запустить один раз
Код
$this->diafan->configmodules("captcha","cart",0,0,1);


Может и поможет, ведь изначально капча отключена и ее надо как бы включить

Александр (capitan) 1094 августа, редакция 4 августа

Скорее всего надо еще добавить в cart.model.php в строчку 500
Код
$fields[] = "captcha";
$this->result["one_click"]["captcha"] = $this->diafan->_captcha->get("cart", $this->result["one_click"]["error_captcha"]);

if($fields)
{
$this->form_errors($this->result, $this->result['form_tag'], $fields);
}

а в шаблоне cart.view.one_click.php
Код
echo $result['captcha'];
Спасибо сказали: Дмитрий Суворов (trololo7lol)

Дмитрий Суворов (trololo7lol) 5 августа, редакция 5 августа

Спасибо! Но этот вариант не работал.
Забыл сказать, у меня данные формы заказа в 1 клик работают на ajax. То есть, на этапе проверки в empty_required_field нужно было проверять капчу, как я понял.
Как я решил:

/modules/cart/cart.model.php в функции form_param() добавил:
Код
$this->result["captcha"] = $this->diafan->_captcha->get("cart");

/custom/my/modules/cart/views/cart.view.one_click.php добавил:
Код
echo '<div class="control">'.$result['captcha'].'</div>';

/modules/cart/cart.action.php в функции order() добавил дополнительные параметры для капчи:
Код
if ($is_one_click) {
$params[] = array(
'name' => 'google_recaptcha',
'type' => 'captcha',
);
}

/includes/action.php в функции empty_required_field() добавил:
Код
if ($row["type"] == 'captcha' && $row["name"] == 'google_recaptcha') {
$this->check_captcha();
}

Осталась небольшая проблемка. Для каждого товара в стр категории генерируется своя всплывающая форма. В каждой форме своя рекаптча. И все они имеют одинаковый id recaptcha_div_cart.
Соответственно, нужно сделать уникальным каждый такой id.
Самый очевидный способ - добавить в конце id товара.

UPD
В шаблоне /custom/my/modules/cart/views/cart.view.one_click.php перед выводом капчи прошелся регуляркой:
Код
$captcha = preg_replace('/ id="recaptcha(.*?)"/', ' id="recaptcha\1_' . $result['good_id'] . '"', $result['captcha']);
echo '<div class="control">'.$captcha.'</div>';

Дмитрий Суворов (trololo7lol) 3 августа

Еще думал, что капчу как элемент формы можно выбрать в админке
Справочники -> Форма оформления заказа
и назначить чекбоксом "Использовать в форме быстрого заказа"
Но там ее нет

Дмитрий (taddi) Сайт в Diafan.Cloud46 августа

Я просто в Справочники -> Форма оформления заказа добавил поле тип Чекбокс "Я не робот" и поставил его как обязательное и для формы быстрого заказа. Пока тестирую насколько конверсия может упасть. А иначе спамеры в заказы валят.

Александр (capitan) 1096 августа

Так поле Я не робот спамерами будет заполнено автоматически и форма отправится.

Там надо делать проверку, что если поле отмечено,то наоборот не отправлять форму, а просто выводить сообщение, что форма отправлена,

Дмитрий (taddi) Сайт в Diafan.Cloud47 августа

Ну пока помогает, спама нет. И пока не придумал как по-другому. Потому что любая каптча в форме оформления заказа не желательна.

Дмитрий Суворов (trololo7lol) 7 августа, редакция 7 августа

Есть еще идея. Не знаю насколько она рабочая и сколько затронет правок в шаблоне и скриптах.
Заменить тег формы и кнопку type="submit" на div. То есть это будет вроде как не форма, но по функциональности таковой будет являться.

Андрей (R4W) 918 августа

Ты это поле в шаблоне не выводи, а создавай его type hidden, JSом.

Хотя спамеры возможно эмулируют браузер. Но зато конверсия не упают. Либо рекапчу вешайте скрытую просто.