Капча подключается очень просто. В шаблоне Smarty в подходящем месте необходимо разместить:
{$wa->captcha()}
И в PHP проверять введенный код следующим образом:
if (wa()->getCaptcha()->isValid()) { // капча введена правильно } else { // неправильно }
Конструкция Smarty {$wa->captcha}
возвращает HTML-код для капчи, который содержит картинку img, input для ввода кода и ссылку обновления капчи:
<div class="wa-captcha"> <p> <img class="wa-captcha-img" src="{$captcha_url}" alt="CAPTCHA" title="Refresh CAPTCHA"> <strong>→</strong> <input type="text" name="captcha" class="wa-captcha-input" autocomplete="off"> </p> <p> <a class="wa-captcha-refresh">Refresh CAPTCHA</a> </p> <script> // ... js-код для работы ссылки Refresh CAPTCHA </script> </div>
Внешний вид можно настроить с помощью CSS: всем ключевым элементам присвоены классы с префиксом wa-captcha
.
Если вместо указанного выше кода необходимо использовать другой HTML для капчи, то это можно сделать с помощью конструкции {$wa->captchaUrl()}
, которая возвращает только адрес (URL) картинки с капчей. Размер картинки по умолчанию — 120x40px. Пример:
<img src="{$wa->captchaUrl()}"> <input type="text" name="code" />
Если для аттрибута name
для input
с кодом капчи указать значение, отличное от captcha
(как в примере выше), то проверка на стороне сервера будет делаться так:
$code = waRequest::post('code'); wa()->getCaptcha()->isValid($code);
Ограничения: нельзя показывать две капчи на одной странице. Код, показываемый в капче, сохраняется в сессии.
Переопределение капчи
На уровне приложения можно указать класс, который используется для капчи, а также настроить параметры стандартной капчи (размеры, содержание и т.д.).
По умолчанию используется класс waCaptcha
. Настройки waCaptcha
:
'chars' => 'abdefhknrqstxyz23456789', 'width' => 120, // px 'height' => 40, // px 'font_size' => 25, // pt
Для переопределения вышеуказанных настроек waCaptcha
для вашего приложения необходимо создать файл wa-apps/APP_ID/lib/config/factories.php
следующего содержания:
<?php return [ 'captcha' => [ 'waCaptcha' , [ 'width' => 200, 'height' => 70, 'font_size' => 40, ], ], ];
Такое переопределение сделает капчу в вашем приложении размером 200x70 пикселей и размером шрифта 40pt.
Чтобы написать свой класс капчи, нужно унаследовать его от класса waAbstractCaptcha
.
В классе должны быть реализованы следующие методы:
public function isValid($code = null) // должен возвращать true, если код правильный, и false в противном случае public function getHtml() // должен возвращать полный HTML-код капчи (и картинку img, и поле input для ввода кода) public function display() // должен отдавать картинку капчи
Т. е. класс-наследник должен иметь примерно такой вид:
<?php class myCaptcha extends waAbstractCaptcha { public function isValid($code = null) { } public function getHtml() { } public function display() { } }
В качестве примера рекомендуется посмотреть реализацию класса waCaptcha
.
После реализации вашего класса капчи нужно в factories.php
указать имя вашего класса:
return [ 'captcha' => 'myCaptcha', ];