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. Внедрение в макет кода формы с reCaptcha

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

Вас может заинтересовать:

HostCMS. Показ схожих товаров в карточке продукта
HostCMS. Показ схожих товаров в карточке продукта

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


HOSTCMS v.6. Ссылка на все товары производителя в карточке товара
HOSTCMS v.6. Ссылка на все товары производителя в карточке товара
Если нужно дать возможность покупателю выбрать товары текущего производителя, когда он находится в карточке товара, то вам пригодится данная небольшая доработка...

HOSTCMS v.6. Выводим производителей с разбивкой по алфавиту
HOSTCMS v.6. Выводим производителей с разбивкой по алфавиту
Если у вас в интернет-магазине много производителей (брендов), то приведенное нами решение поможет организовать показ всех производителей с разбивкой по алфавиту...

HOSTCMS v.6. Правильная семантическая микроразметка
HOSTCMS v.6. Правильная семантическая микроразметка
Не будем углубляться в терминологию и описание того, что означает микроразметка, т.к. об этом уже много чего написано и я беру за аксиому, что вы об этом уже знаете, раз читаете данную статью. Задача статьи описать более конкретный случай, а именно - использование микроразметки в XSL шаблонах HostCMS...

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

HostCMS v.6. Вывод товаров по значению дополнительного свойства типа строка
HostCMS v.6. Вывод товаров по значению дополнительного свойства типа строка
Вам нужно вывести товары интернет-магазина по какому-то, заранее определенному, признаку? Для начала создаем дополнительное свойство товара, пройдя по цепочке «Интернет-магазин ⇒ Товар ⇒ Свойства товара».

QRcode

2010-2024 © Веб студия iNikSite.ru (г. Подольск). Все права сохранены.

Цены на сайте носят ознакомительный характер и не являются публичной офертой! Просим уточнять цены при отправке заявки в нашу компанию. У нас действуют специальные предложения и скидки на различные варианты исполнения заказа и 100% предоплату!

Мы используем файлы cookie. Они помогают улучшить ваше взаимодействие с сайтом.