Капча подключается очень просто. В шаблоне 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',
];









