HOSTCMS v.6. Внедрение в макет кода формы с reCaptcha

HOSTCMS v.6. Внедрение в макет кода формы с reCaptcha
HOSTCMS v.6. Внедрение в макет кода формы с reCaptcha

Хочу поделиться с вами кодом, который размещается в макете страницы и подгружает в нее форму с reCaptcha.

Для использования этого кода у вас должна быть редакция HostCMS, как минимум "Малый Бизнес". Также, через аккаунт Google, получите код reCaptcha для своего домена, сохраните ключи и ссылку на скрипт recaptcha.js

1. Для начала создаете в админпанели форму с нужными полями/

2. Подключаете в head скрипт API reCaptcha 

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

3. В XSL шаблоне вывода формы, в месте, где хотите показать reCaptcha, размещаете это код:

<div class="g-recaptcha" data-sitekey="6LeQXykUlq519d56878"></div>

4. В коде макета страницы размещаете php код, показанный ниже, с обработчиком формы и reCaptha. Читайте внимательно комментарии в самом коде и выполните то, что в них указано.

<?php
// add ФОРМА БЫСТРОГО ЗАКАЗА
$oForm = Core_Entity::factory('Form', 4);  // Заменить на id своей формы
$Form_Controller_Show = new Form_Controller_Show($oForm);
$sSecretKey = "6LeQAAAAAGKJrNNXLPZ94QcuJEy"; // Указывается секретный ключ reCAPTCHA
if (!is_null(Core_Array::getPost($oForm->button_name)))
{
//------------------ add recaptha if (Core_Array::getPost('g-recaptcha-response')) { $sResponse = Core_Array::getPost('g-recaptcha-response'); $sUrl = 'https://www.google.com/recaptcha/api/siteverify?secret='; . $sSecretKey . "&response=" . $sResponse; $aAnswer = json_decode(file_get_contents($sUrl), TRUE); if ($aAnswer['success']) { //------------------ end recaptha
$Form_Controller_Show ->values($_POST + $_FILES) // 0 - html, 1- plain text ->mailType(0) ->mailXsl( Core_Entity::factory('Xsl')->getByName('ПисьмоКураторуФормыВФорматеHTML') ) ->mailFromFieldName('pochta@yandex.en') ->process(); //Отправляем письмо-подтверждение пользователю $Form_Controller_Show1 = clone $Form_Controller_Show; $sEmail = Core_Array::get($Form_Controller_Show1->values, 'email'); if (Core_Valid::email($sEmail)){ ob_start(); $Form_Controller_Show1 ->xsl( Core_Entity::factory('Xsl')->getByName($Form_Controller_Show1->mailType == 0 ? 'ПисьмоПодтверждениеПользователюФормыВФорматеHTML' : 'ПисьмоПодтверждениеПользователюФормы') ); //->show() $sMailText = ob_get_clean(); if (mb_strpos($sMailText, 'ERROR TRUE') === FALSE){ $subject = 'Вами была заполнена форма Быстрого заказа на сайте site.en';// Темe письма отредактировать // При текстовой отправке нужно преобразовать HTML-сущности в символы $Form_Controller_Show->mailType == 1 && $sMailText = html_entity_decode(strip_tags($sMailText), ENT_COMPAT, 'UTF-8'); $oCore_Mail = Core_Mail::instance() ->to($sEmail) ->from(EMAIL_TO) ->subject($subject) ->message(trim($sMailText)) ->contentType($Form_Controller_Show->mailType == 0 ? 'text/html' : 'text/plain') ->header('X-HostCMS-Reason', 'Form'); // Массив содержащий пути прикрепленных файлов и их имена $aForm_Fields = $oForm->Form_Fields->findAll(); foreach ($aForm_Fields as $oForm_Field){ if ($oForm_Field->type == 2){// File $value = Core_Array::get($Form_Controller_Show->values, $oForm_Field->name); if (!is_null($value)){ if (is_array($value) && $value['size'] > 0){ $oForm_Fill_Fields = Core_Entity::factory('Form_Fill_Field'); $oForm_Fill_Fields->queryBuilder() ->where('form_field_id', '=', $oForm_Field->id) ->where('value', '=', $value['name']) ->limit(1); $aForm_Fill_Fields = $oForm_Fill_Fields->findAll(); if (isset($aForm_Fill_Fields[0])){ $oCore_Mail->attach(array( 'filepath' => $aForm_Fill_Fields[0]->getPath(), 'filename' => $value['name'] )); } } } } } $oCore_Mail->send(); } }
//-------------------------- add recaptha } else { Core_Log::instance()->clear() ->status(Core_Log::$ERROR) ->write('Google Recaptcha: ' . $aAnswer['error-codes'][0]); $Form_Controller_Show ->addEntity( Core::factory('Core_Xml_Entity') ->name('recaptcha_error')->value('1') // Добавляем в XML тег, чтобы затем обработать его в XSL шаблоне вывода формы, для показа сообщения о том, что reCaptcha не подтверждена ); } } else { $Form_Controller_Show ->addEntity( Core::factory('Core_Xml_Entity') ->name('recaptcha_error')->value('1') ); } //-------------------------- end recaptha
} $Form_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName('ОтобразитьФормуБыстрыйЗаказ') // Заменить на свой XSL шаблон ) ->addEntity( Core::factory('Core_Xml_Entity') ->name('site_key')->value('6LeQXykABVxo0YpLcOUaswIFlq5') // Указываете ключ reCAPTCHA ) ->show(); ?>

5. В XSL шаблон вывода формы добавьте нижеприведенный код, чтобы обработать ошибку, если reCaptcha не пройдена

<xsl:when test="recaptcha_error = 1">
<div id="error"><div id="redirection"></div>Подтвердите, что вы не робот!</div>
</xsl:when>

Понравилась статья?
Будем признательны, если поделитесь в соцсетях или мессенджерах, а также присоединитесь к нашей группе Вконтакте. Будет интересно!

Другие статьи по теме:

HOSTCMS v.6. Проверка вводимых данных при оформлении заказа
HOSTCMS v.6. Проверка вводимых данных при оформлении заказа

В 6 версии разработчики убрали проверку вводимых данных в форму заказа на шаге заполнения адреса доставки. Предлагаю очень простое решение этой проблемы с использованием JavaScript. 

Как открыть интернет-магазин
Как открыть интернет-магазин

Создание интернет-магазина может показаться сложной задачей, но с правильными инструментами начать продавать онлайн очень просто.

HOSTCMS v.6. Поиск по сайту с показом карточки товара
HOSTCMS v.6. Поиск по сайту с показом карточки товара

Небольшая доработка стандартного XSL шаблона «Поиск» для сайтов на HostCMS

HOSTCMS v.6. Красивое горизонтальное выпадающее меню на CSS
HOSTCMS v.6. Красивое горизонтальное выпадающее меню на CSS

Меню адаптированно к использованию на сайтах под администрированием редакции HostCMS v.5 для вывода элементов каталога товаров. В выпадающем меню также выводится изображение подгруппы.

HOSTCMS v.6. Полезные SQL запросы
HOSTCMS v.6. Полезные SQL запросы

Подборка SQL запросов к базе данных для сайтов на HostCMS v.6. Может быть очень полезной в некоторых случаях в пройцессе создания или обслуживания сайта...

Как проверить формы с помощью Bootstrap 5
Как проверить формы с помощью Bootstrap 5

Валидация форм является одним из наиболее важных факторов, когда дело доходит до сбора информации и предотвращения неправильного использования веб-форм.

Мы используем cookie-файлы, чтобы получить статистику, которая помогает нам обеспечивать вас лучшим контентом. Вы можете прочитать подробнее о cookie-файлах или изменить настройки браузера. Отключение cookie-файлов может привести к неполадкам в работе сайта. Продолжая пользоваться сайтом без изменения настроек, вы даете согласие на использование ваших cookie-файлов. Это совершенно безопасно!