Captcha
CAPTCHA – фильтр спам-ботов и реальных пользователей сайта, которые оставляют сообщения в формах различных модулей сайта, таких как «Обратная связь», «Комментарии», «Обратная связь», «Форум» и т.д. Капча может быть трех видов, классический «Код на картинке», более сложная вариация «reCAPTCHA», или «Вопрос-Ответ», когда администратор задает вопрос и варианты ответа, а пользователь должен выбрать правильный, чтобы его сообщение было принято на сайте.
Примечание: в DIAFAN.CMS используется «reCAPTCHA» 2-ой версии.
Подключение
Подключаемая часть – файл modules/captcha/captcha.inc.php. В нем описан класс
Captcha_inc. В модуле к объекту класса можно обратиться через переменную $this->diafan->_captcha
. Экземпляр класса создается при первом вызове
переменной.
Методы
string get ([string $modules = "modules"], [string $error = ""], [boolean $is_update = false]) – Выводит капчу.
- string $modules: метка капчи
- string $error: ошибка ввода кода, если запрос передан не через Ajax
- boolean $is_update: капча генерируется для обновления
Пример:
// в модели modules/comments/comments.inc.php запрашиваем каптчу
$captcha = $this->diafan->_captcha->get("comments", '');
//выводим защитный код в шаблоне modules/comments/views/comments.view.form.php
echo $captcha;
string|boolean false error ([string $modules = "modules"]) – Проверяет правильность ввода капчи.
- string $modules: метка капчи
Пример:
//выводим защитный код в шаблоне modules/comments/views/comments.view.form.php
echo $captcha;
//запрашиваем правильно ли введен защитный код при обработке запроса в файле modules/faq/faq.action.php
$error = $this->diafan->_captcha->error('faq');
if($error)
{
// защитный код введен неправильно
}
boolean configmodules (string $module, [integer $site_id = 0]) – Проверяет подключена ли капта в настройках модуля.
- string $module: названием модуля
- integer $site_id: страница сайта с подключенным модулем
Настройки
В настройках модуля можно выбрать бэкенд для капчи и вписать настройки для бэкенда (используется reCAPTCHA v.2).
Бэкенды
К модулю можно подключить бэкенды для работы с различными сервисами. Добавлено в версии 6.0.9.10.
Для этого нужно разработать несколько файлов стандартной структуры и разместить папку с этими файлами в папку captcha/backend. После этого в настройках модуля появиться тип капчи.
Бэкенд должен иметь уникальное название латинскими буквами (по примеру recaptcha, qa и др.). Для примера будем использовать название myservice.
В папке captcha/backend/myservice могут находиться следующий файлы:
- captcha.myservice.admin.php
- captcha.myservice.admin.js
- captcha.myservice.inc.php
- captcha.myservice.view.php
- captcha.myservice.js
- captcha.myservice.php
Это не обязательная структура расширения. Нужно использовать только необходимые файлы. Кроме того, в бэкенд можно добавлять свои файлы любой другой структуры.
Рассмотрим структуру стандартных файлов
captcha.myservice.admin.php
Файл содержит настройки бэкенда, подгружаемые при выборе поставщика услуг.
Структура файла:
Пример:
// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
$path = __FILE__;
while(! file_exists($path.'/includes/404.php'))
{
$parent = dirname($path);
if($parent == $path) exit;
$path = $parent;
}
include $path.'/includes/404.php';
}
// наследуем класс Diafan, чтобы был доступен объект $this->diafan
class Captcha_myservice_admin extends Diafan
{
public $config = array(
"name" => 'Название бэкенда, выводимое администратору',
// настройки расширения
// ключи этого массива - название настроек латинскими буквами
"params" => array(
// можно указать просто текстовое описание настройки
// тогда она будет редактироваться как строка
'param1' => 'Название первой настройки',
// можно указать массив данных, тогда есть возможность
// задать тип данных и подсказку
'param2' => array(
// название второй настройки
'name' => 'Ключ к API',
// доступны следующие типы:
// text - строка, по умолчанию
// checkbox - галочка
// select - список
// info - название выводиться текстом без редактирования
// none - не отображается, но сохраняется
'type' => 'text',
// значение списка, если указан тип select
'select' => array(
'ключ1' => 'значение1',
'ключ2' => 'значение2',
'ключ3' => 'значение3',
),
// подсказка
'help' => 'Ключ запросите у сервиса капчи.',
),
// можно определить свою функцию для вывода поля и его сохранения
'param3' => 'Название третьей настройки',
)
);
/**
* Своя функция на редактирования настройки param3
*
* @param string $value значение для param3
* @param array $values значение всех полей настроек, ключ - название поля
* @return void
*/
public function edit_variable_param3($value, $values)
{
echo '<div class="unit">
<div class="infofield">Название поля</div>
Значение поля
</div>';
}
/**
* Своя функция на сохранение настройки param3
* функция возвращает значение, которое нужно сохранить (не обязательно)
*
* @return mixed значение
*/
public function save_variable_param3()
{
// сохраняет данные
return $value;
}
}
captcha.myservice.admin.js
При наличии этот JS-файл автоматически подключается в интерфейс настроек.
captcha.myservice.admin.inc.php
Вывод капчи на сайте.
Пример:
// ошибка 404 при прямом вызове файлов
if (! defined('DIAFAN'))
{
$path = __FILE__;
while(! file_exists($path.'/includes/404.php'))
{
$parent = dirname($path);
if($parent == $path) exit;
$path = $parent;
}
include $path.'/includes/404.php';
}
// наследуем класс Diafan, чтобы был доступен объект $this->diafan
class Captcha_myservice_admin_inc extends Diafan
{
/**
* Выводит капчу
*
* @param string $modules метка капчи
* @param string $error ошибка ввода кода, если запрос передан не через Ajax
* @param boolean $is_update капча генерируется для обновления
* @return string
*/
public function get($modules, $error, $is_update)
{
// функция выдает HTML-код капчи
// настройки бэкенда доступны через настройки модуля:
// $this->diafan->configmodules("названиеБэкенда_названиеНастройки", 'captcha');
// при необходимости здесь можно подключить файл шаблона
ob_start();
include(Custom::path('modules/captcha/backend/myservice/captcha.myservice.view'.($is_update ? '.update' : '').'.php'));
$text = ob_get_contents();
ob_end_clean();
return $text;
}
/**
* Проверяет правильность ввода капчи
*
* @param string $modules метка капчи
* @return string|boolean false
*/
public function check($modules)
{
if(! $check_captcha)
{
return 'Вы робот!';
}
else
{
return false;
}
}
}
captcha.myservice.js
При наличии этот JS-файл автоматически подключается на сайте.
captcha.myservice.php
Файл прямого вызова. Используется, например, для получения сгенерированной картинки капчи.
Обратиться к файлу можно по адресу: http://site.ru/captcha/get/myservice/.
База данных
{captcha_qa} – Вопросы для капчи типа Вопрос-ответ
{captcha_qa_answers} – Варианты ответов для капчи типа Вопрос-ответ
Файлы
modules/captcha/admin/captcha.admin.php – настройки модуля;
modules/captcha/admin/captcha.admin.inc.php – подключение модуля к административной части других модулей;
modules/captcha/backend/kcaptcha/captcha.kcaptcha.php – генерирование изображения капчи;
modules/captcha/backend/kcaptcha/captcha.kcaptcha.action.php – обработка POST-запросов бэкенда;
modules/captcha/backend/kcaptcha/captcha.kcaptcha.admin.php – настройки капчи «Код на картинке»;
modules/captcha/backend/kcaptcha/captcha.kcaptcha.inc.php – подключение для работы с капчей «Код на картинке»;
modules/captcha/backend/kcaptcha/captcha.kcaptcha.js – JS-сценарий стандартной капчи;
modules/captcha/backend/kcaptcha/captcha.kcaptcha.view.php – шаблон стандартной капчи;
modules/captcha/backend/kcaptcha/captcha.kcaptcha.view.update.php – шаблон формы стандартной капчи;
modules/captcha/backend/qa/captcha.qa.admin.php – настройки капчи «Вопрос-Ответ»;
modules/captcha/backend/qa/captcha.qa.inc.php – подключение для работы с капчей «Код на картинке»;
modules/captcha/backend/qa/captcha.qa.js – JS-сценарий капчи «Вопрос-Ответ»;
modules/captcha/backend/qa/captcha.qa.view.php – шаблон капчи «Вопрос-Ответ»;
modules/captcha/backend/qa/captcha.qa.view.update.php – шаблон формы для капчи «Вопрос-Ответ»;
modules/captcha/backend/recaptcha/captcha.recaptcha.admin.php – настройки капчи «reCAPTCHA»;
modules/captcha/backend/recaptcha/captcha.recaptcha.inc.php – подключение для работы с капчей «reCAPTCHA»;
modules/captcha/backend/recaptcha/captcha.recaptcha.js – JS-сценарий для reCAPTCHA;
modules/captcha/backend/recaptcha/captcha.recaptcha.view.php – шаблон reCAPTCHA;
modules/captcha/backend/recaptcha3/captcha.recaptcha3.admin.php – настройки капчи «reCAPTCHA v3»;
modules/captcha/backend/recaptcha3/captcha.recaptcha3.inc.php – подключение для работы с капчей «reCAPTCHA v3»;
modules/captcha/backend/recaptcha3/captcha.recaptcha3.js – JS-сценарий для reCAPTCHA v3;
modules/captcha/backend/recaptcha3/captcha.recaptcha3.view.php – шаблон reCAPTCHA v3;
modules/captcha/captcha.php – контроллер модуля;
modules/captcha/captcha.action.php – обработка POST-запросов модуля;
modules/captcha/captcha.get.php – прямое обращение к файлам бэкенда капчи;
modules/captcha/captcha.inc.php – подключение для работы с капчей;
modules/captcha/captcha.install.php – установка модуля.
Дополнения
Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.