Modx revo + quip, добавить captcha
Добрый вечер, друзья. Проблема у меня в том, что не могу понять, как подключить капчу в quip, но не reCaptcha, а какую-нибудь аналогичную(по проще типа введите 3х значное чилсло на картинке). Не могу догнать где, что в коде править. Укажите мне путь!
1 ответов
Навалял решение. Костыльное решение, но рабочее.core/components/quip/controllers/web/ThreadReply.php
- В качестве капчи использовал kcaptcha, убрал шум, и оставилтолько цифры, все настраивается через конфигурационный файл kcaptcha_config.php
- Закинул капчу по адресу assets/components/kcaptcha/
- В файле index.php добавил поддержку API Modx для доступа к сессиям modx. Вот исправленное содержимое файла "**assets/components/kcaptcha/index.php**":
$modx= new modX();
$modx->initialize('web');
error_reporting (E_ALL);
include('kcaptcha.php');
session_start();
$captcha = new KCAPTCHA();
if($_REQUEST[session_name()]){
$_SESSION<span style="color: rgb(51, 51, 51); font-family: Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">['captcha_keystring'] = $captcha->getKeyString();)</span>
4 Затем в файле **core/components/quip/controllers/web/ThreadReply.php** добавил следующий код в функцию handlePost()
<?php
$modx->initialize('web');
error_reporting (E_ALL);
include('kcaptcha.php');
session_start();
$captcha = new KCAPTCHA();
if($_REQUEST[session_name()]){
$_SESSION<span style="color: rgb(51, 51, 51); font-family: Arial, Helvetica, sans-serif; white-space: normal; background-color: rgb(255, 255, 255);">['captcha_keystring'] = $captcha->getKeyString();)</span>
4 Затем в файле **core/components/quip/controllers/web/ThreadReply.php** добавил следующий код в функцию handlePost()
<?php
$fields['kcaptcha'] = strip_tags($fields['kcaptcha']);
//... //... if (empty($fields['kcaptcha'])) $errors['kcaptcha'] = "Вы не ввели цифры на картинке";
else{
if (empty($_SESSION['captcha_keystring'])){
$errors['kcaptcha'] = "Переменной captcha_keystring нет".$_SESSION['captcha_keystring'];
}
elseif ($fields['kcaptcha']!=$_SESSION['captcha_keystring']){
$errors['kcaptcha'] = $fields['kcaptcha']."Вы не правильно ввели код на картинке".$_SESSION['captcha_keystring'].session_name().'='.session_id();
};
}?>
5 Ну и кусок капчи в шаблоне формы комментария выглядит так:
Может кому поможет, вот скрин :
//... //... if (empty($fields['kcaptcha'])) $errors['kcaptcha'] = "Вы не ввели цифры на картинке";
else{
if (empty($_SESSION['captcha_keystring'])){
$errors['kcaptcha'] = "Переменной captcha_keystring нет".$_SESSION['captcha_keystring'];
}
elseif ($fields['kcaptcha']!=$_SESSION['captcha_keystring']){
$errors['kcaptcha'] = $fields['kcaptcha']."Вы не правильно ввели код на картинке".$_SESSION['captcha_keystring'].session_name().'='.session_id();
};
}?>
5 Ну и кусок капчи в шаблоне формы комментария выглядит так:
<div class="quip-fld kcaptcha">
<label><span>Введите цифры на картинке</span></label>
<span class="quip-error">[[+error.kcaptcha]]</span>
<img class="kcaptcha_image" src="[[++assets_url]]components/kcaptcha/?[[!returnSession? ¶m=`ses_name`]]=[[!returnSession? ¶m=`ses_id`]]">
<input type="text" name="kcaptcha" id="quip-comment-kcaptcha-[[+idprefix]]" value="[[+kcaptcha]]" class="kcaptcha_field"/>
<br />
</div>
Может кому поможет, вот скрин :