Блог

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


Хочу поделиться с вами кодом, который размещается в макете страницы и подгружает в нее форму с 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>

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

Блог

  • 29 марта 2018 г.
    Боковое выпадающее меню на CSS для каталога товаров. HostCMS v.6
    Создадим раздвижное меню для каталога товаров с несколькими уровнями вложенности разделов. Меню будет открыто в основных разделах, лежащих в корневом каталоге. В принципе, вам нужно просто скопировать шаблон, CSS стили и пользоваться этим меню...
  • 07 марта 2018 г.
    Тенденции веб-дизайна в 2018 году
    В 2018 году, дизайнеры начинают разработку чистых и простых сайтов, способных соответствовать стандартам мобильных достижений. Центр внимания сосредотачивается на проекты с прямолинейным, но эффективным и оптимизированным дизайном.
  • 26 января 2018 г.
    Что такое лендинг пейдж?
    Дословно лендинг пейдж переводится с английского (landing page) как целевая страница. В Рунете можно встретить еще один перевод термина лендинг пейдж – посадочная страница...
  • 28 декабря 2017 г.
    Внедрение в макет кода формы с reCaptcha. HostCMS 6
    Хочу поделиться с вами кодом, который размещается в макете страницы и подгружает в нее форму с reCaptcha...
  • 24 ноября 2017 г.
    Выводим производителей с разбивкой по алфавиту. HostCMS v.6
    Если у вас в интернет-магазине много производителей (брендов), то приведенное нами решение поможет организовать показ всех производителей с разбивкой по алфавиту...
  • 07 сентября 2017 г.
    Четыре причины, почему Facebook необходим для маркетинговых кампаний
    Успех вашего онлайн-бизнеса зависит от того, как вы реализуете свою стратегию цифрового маркетинга во взаимодействии с вашей целевой аудиторией...
  • 17 июня 2017 г.
    Варианты создания логотипа сайта
    Фундаментом фирменного стиля является логотип. Непосредственно на логотип, в первую очередь, обращают внимание клиенты любой компании, к тому же, логотип должен быть обязательно размещён на такой имиджевой продукции, как ручки, чашки фирменные бланки и прочее.

Все статьи

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

WEB ДИЗАЙН

Разработка дизайна сайта. Использование шаблонов для "быстрых" проектов.

ПОДДЕРЖКА САЙТА

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

ПРОДАЖА ГОТОВЫХ РЕШЕНИЙ

Готовые интернет-магазины и интеграционные решения для сайтов на HostCMS

ДОПОЛНИТЕЛЬНЫЕ УСЛУГИ

Графический дизайн (разработка логотипа). Написание seo-текстов. Редизайн сайта. Замена CMS. Кодинг

Подробный ПРАЙС-ЛИСТ