Своя капча в HostCMS v.6.0.x

Среда, 12 Декабрь 2012

 

В интернет магазине на HostCMS к отзывам о товарах проходило очень много спама, думаю это из за того что стандартная каптча довольно примитивная и отображает только цифры. Поэтому было принято решение встроить капчу от проекта captcha.ru, которая более сложна для прочтения роботом и имеет конфиг в котором можно настроить нужные параметры. Данная статья является краткой практической заметкой без особого углубления в тонкости HostCMS т.к я с ней работаю впервые и по ней достаточно скудое описание в интернете.

 

Скачиваем капчу (сaptcha) с http://www.captcha.ru/ и заливаем папку "kcaptcha" со всем содержимым в корень сайта, выставляем права 0755 на все файлы и подпапки.

 

Далее находим нужную ТДС (типовая динамическая страница, лежат в папке /hostcmsfiles/lib/lib_айди ТДС (можно узнать из админки Типовые динамические страницы =>Выбираем нужную и жмем редактировать далее на вкладке =>Дополнительные смотрим =>Идентификатор).

 

HostCMS id Типовой динамической страницы

 

И там где у нас идет проверка на правильность ввода капчи (сaptcha):

 

 
<?php
 
  if ($site_user_id > 0
  || $Captcha->ValidCaptcha(Core_Type_Conversion::toStr($_POST['captcha_key']), Core_Type_Conversion::toStr($_POST['captcha_keystring'])))
?>
 

 

Заменяем на:

 

 
<?php
  Core_Session::start();
  if ($site_user_id >= 0 && (isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] === $_POST['captcha_keystring']))
?>
 

 

Затем здесь же ищем строку:

 

 
<?php
  /* Вывод конкретного элемент */
  //$param['show_catalog_item_type'] = array('active', 'inactive');
?>
 

 

И добавляем после нее:

 

 
<?php
  $external_propertys['session_name'] = session_name();
  $external_propertys['session_id'] = session_id(); 
?>
 

 

Это переменные которые будут доступны в XSL шаблоне.

 

Теперь собственно определяем XSL шаблон (его можно отредактировать и с фронтенда, предварительно авторизовавшись в админке, в папке /hostcmsfiles/xsl/). И ищем место где выводится стандартная каптча:

 

 
<div style="float: left; margin: 2px 0 0 10px;">
  <img id="comment_{$comment_id}" style="border: 1px solid #000000" src="/captcha.php?get_captcha={captcha_key}{$comment_id}&amp;height=30&amp;width=100" title="Код подтверждения" name="captcha"/>
  <div id="captcha" style="clear:both;">
    <a href="javascript:void(0);" onclick="ReNewCaptchaById('comment_{$comment_id}', '{//captcha_key}{$comment_id}', 30); return false;">Показать другое число</a>
  </div>
</div>
 

 

И заменяем на подгрузку своей капчи:

 

 
<div style="float: left; margin: 2px 0 0 10px;">
  <script type="text/javascript">
    function updCaptcha(img, session_name, session_id){
      $("#"+img+"").attr("src", " ");
      $("#"+img+"").prop("src", "/kcaptcha/index.php?"+session_name+"="+session_id+"&amp;anc="+Math.floor(Math.random()*100000));
    }
  </script>
 
  <img id="comment_{$comment_id}" style="border: 1px solid #000000;" src="/kcaptcha/index.php?{/shop/session_name}={/shop/session_id}" />
  <div id="captcha" style="clear:both;">
    <a href="javascript:void(0);" onclick="updCaptcha('comment_{$comment_id}', '{/shop/session_name}', '{/shop/session_id}'); return false;">Показать другое число</a>
  </div>
</div>
 

 

Последнее: нам нужно в скрипте капчи /kcaptcha/index.php стартовать внутреннюю сессию hostcms. Комментарий суппорта HostCMS: "потому что сторонний файл ключ записывает в свою сессию, которая хранится чаще всего в файле на хостинге, а мы храним сессии в своих таблицах. Подключайте bootstrap.php и используйте Core_Session::start() для старта сессии.", поэтому пишим:

 

 
<?php
error_reporting (E_ALL);
 
include('kcaptcha.php');
 
//session_start();
include('../bootstrap.php');
Core_Session::start();
 
$captcha = new KCAPTCHA();
 
if($_REQUEST[session_name()]){
  $_SESSION['captcha_keystring'] = $captcha->getKeyString();
}
?>
 

 

Все, теперь наслаждаемся новой captcha!

 

Руководство разработчика HostCMS

Core_Session

 

ВСЕХ ЧИТАТЕЛЕЙ С НАСТУПАЮЩИМ 2013 ГОДОМ!!!
ВСЕМ УСПЕХОВ В УЧЕБЕ, РАБОТЕ И ОТДЫХЕ!!! :)

 

PS. Читайте последние записи RSS Подписка на RSS

Метки:

Комментарии 

 
anonim Среда, 09 Январь 2013

Не подскажите зачем Своя капча в HostCMS v.6.0.x | HostCMS | CMS Системы управления контентом | cleverscript.ru нужен

 

 
 
anonim Среда, 09 Январь 2013

Простите, а для чего Своя капча в HostCMS v.6.0.x | HostCMS | CMS Системы управления контентом | cleverscript.ru используется

 

 
 
anonim Понедельник, 04 Март 2013

Затем, что стандартная капча - примитивна и пропускает спам от роботов!

 

 
 
tempter Четверг, 26 Январь 2017

А как подключить recaptcha от гугла вместо стандартной на хостцмс?

 

 
 
cleverscript Среда, 31 Май 2017

Вот здесь подробно описано как это делается (от CMS не зависит) https://webdesign.tutsplus.com/ru/tutorials/how-to-integrate-no-captcha-recaptcha-in-your-website--cms-23024

 

 

Добавить комментарий