Блог

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 v.6. Правильная семантическая микроразметка

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

  • HOSTCMS v.6. Ссылка на все товары производителя в карточке товара

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

  • HOSTCMS v.6. Выводим производителей с разбивкой по алфавиту

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

  • Программирование

    Хотите привлекательный, отзывчивый и функциональный сайт? Мы произведём программирование его составляющих. Слайдеры и анимация, калькуляторы и формы заявок, фильтры товаров и динамические данные — всё для комфорта пользователей вашего интернет-магазина.

  • HOSTCMS v.6. Внедряем coin-slider

    Coin-slider один из популярных слайдеров, который используется на сайтах. Чаще всего слайдеры используют на Главной странице, для придания ей динамики, привлечения внимания к «горячей» информации. В этой статье рассказывается, как внедрить этот слайдер XSL-шаблон сайта, разработанного на HostCMS.

  • Кредитная кнопка (для сайтов на HostCMS v.6)

    Была такая задача в ТЗ клиента — внедрить «кредитную кнопку» Банка «Русский Стандарт» в корзину интернет-магазина. Возможно, кому-то это пригодится.

Наши услуги по созданию сайтов

Веб дизайн

Разработка дизайна и создание интернет-сайта.

Поддержка сайта

Поддержка работоспособности. Написание текстов и статей. Наполнение товарами.

Готовый дизайн

Готовые шаблоны интернет-магазинов и корпоративных сайтов на HostCMS.

Контекстная реклама

Настройка и ведение рекламной кампании в Директ