Вы не зашли.
Страницы 1
Собственно тема о том как настроить капчу от captcha.ru на своем сайте.
Версия NG 0.9.1
1. Идем сюда и качаем архив с сайта.
2. Распаковываем содержимое архива в папку trash
3. Содержимое файла ......\engine\trash\captcha.php заменяем на
<?php
@require_once('core.php');
@include_once dirname(__FILE__).'/kcaptcha/kcaptcha.php';
if(isset($_REQUEST[session_name()])){
session_start();
}
$captcha = new KCAPTCHA();
if($_REQUEST[session_name()]){
$_SESSION['captcha'] = $captcha->getKeyString();
}
?>
3. Содержимое файла ......\engine\captcha.php заменяем на
<?php
@require_once('core.php');
@include_once dirname(__FILE__).'/trash/kcaptcha/kcaptcha.php';
if(isset($_REQUEST[session_name()])){
session_start();
}
$captcha = new KCAPTCHA();
if($_REQUEST[session_name()]){
$_SESSION['captcha'] = $captcha->getKeyString();
}
?>
Вот собственно и вся установка, в самих шаблонах ничего менять не нужно, как работает можно посмотреть у меня на сайте.
Теперь про настройку.
Все настройки капчи вынесены в файл kcaptcha_config.php
$alphabet - перечисляет набор символов шрифта, не рекомендуется менять, так как символ который вы добавите может отсутствовать в тех шрифтах, которые есть в наличии
$allowed_symbols - перечисляет используемые из набора шрифта символы
$fontsdir - название папки со шрифтами
$length - количество отображаемых символов
$width - ширина изображения
$height - высота изображения
$fluctuation_amplitude - величина вертикальной амплитуды смещения символов
$no_spaces - в значении истинна (true) символы отображаются слитно
$show_credits - в значении истинна (true), под капчей отображается содержимое переменной $credits (чтобы не отображать достаточно установить равным false, пример $show_credits = false;)
$credits - содержит значение отображаемое под капчей при установленной в true $show_credits.
$foreground_color - цвет текста капчи
$background_color - цвет фона капчи
$jpeg_quality - качество картинки с капчей.
Изменено Amarelius (2009-10-19 12:37:12)
Всегда ищу разработчиков в Киеве!
Ищешь работу программистом, пиши мне на ArnitUA@gmail.com
Не в сети
Amarelius, а можешь посмотреть и если не сложно - написать, как правильно встроить капчу от http://recaptcha.net/
а то вставить то я её вставил, но только в гостевую и то пришлось собирать два кода в один.. не уверен, насколько удачно . но вроде тестил - проверяет..
http://egf.spsu.ru/plugin/guestbook/
Изменено RMC (2009-10-19 13:47:52)
Не в сети
RMC, проблема в том, что у данной капчи проверка правильности ввода происходит на стороне сервера http://api.recaptcha.net, а в ng в движке, так же в ng по умолчанию капча встраивается как ссылка на изображение, а та капча которую ты предлагаешь сама генерирует html код (опять же на стороне их сервера), поэтому для поддержки этой капчи придется вносить изменения во все модули в которых ты ее планируешь использовать. Но это возможно.
----------------------------------------------------
Вообще я предлагаю создать абстрактный класс для работы с капчей на уровне ядра и плагинов, который будет отвечать за генерацию HTML-кода для капчи и проверять ее правильность, тогда при встраивании любого рода решений не будет необходимости перелапачивать такую кучу кода.
Изменено Amarelius (2009-10-19 15:00:11)
Всегда ищу разработчиков в Киеве!
Ищешь работу программистом, пиши мне на ArnitUA@gmail.com
Не в сети
После такой замены текста captcha.php перестает работать, например, капча в плагине feedback.
Так как сам плагин пишет в сессию captcha.feedback и в качестве параметра к captcha.php передает id=feedback. В самой captcha.php стоит проверка, если передан id, то брать $cShowNumber = $_SESSION['captcha.'.$blockName];, где $blockName = $_REQUEST['id'];
Лечится так: найти
$captcha = new KCAPTCHA();
заменить на
$id = $_REQUEST['id'] ? (string)$_SESSION['captcha.'.$_REQUEST['id']] : '';
$captcha = new KCAPTCHA($id);
Открыть kcaptcha.php
Найти
function KCAPTCHA(){
заменить на
function KCAPTCHA($id){
найти
// generating random keystring
while(true){
$this->keystring='';
for($i=0;$i<$length;$i++){
$this->keystring.=$allowed_symbols{mt_rand(0,strlen($allowed_symbols)-1)};
}
if(!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/', $this->keystring)) break;
}
заменить на
if(!$id){
// generating random keystring
while(true){
$this->keystring='';
for($i=0;$i<$length;$i++){
$this->keystring.=$allowed_symbols{mt_rand(0,strlen($allowed_symbols)-1)};
}
if(!preg_match('/cp|cb|ck|c6|c9|rn|rm|mm|co|do|cl|db|qp|qb|dp|ww/', $this->keystring)) break;
}
} else {
$this->keystring = $id;
}
P.S. Спасибо Артем за баг-репорт
Не в сети
Хотя нет, я не до конца прочувствовал всю логику. Можно сделать проще.
if($_REQUEST[session_name()]){
$_SESSION['captcha'] = $captcha->getKeyString();
}
заменить на
if($_REQUEST[session_name()]){
$_SESSION['captcha'] = $captcha->getKeyString();
if($_REQUEST['id']) $_SESSION['captcha.'.$_REQUEST['id']] = $captcha->getKeyString();
}
Изменено Wolverine (2011-03-19 19:53:26)
Не в сети
Хотя нет, я не до конца прочувствовал всю логику. Можно сделать проще.
if($_REQUEST[session_name()]){ $_SESSION['captcha'] = $captcha->getKeyString(); }
заменить на
if($_REQUEST[session_name()]){ $_SESSION['captcha'] = $captcha->getKeyString(); if($_REQUEST['id']) $_SESSION['captcha.'.$_REQUEST['id']] = $captcha->getKeyString(); }
не работает. постоянно пишет, что неверный код.
Не в сети
Подниму еще раз тему - постоянно вылазит что код неверен.
Делал рекомендованные здесь приемы.
Сюда - продублировал.
Полное описание здесь: http://ngcms.ru/forum/viewtopic.php?pid=43400#p43400
Не в сети
Страницы 1