Капча в регистрации com_user joomla 1.5
В joomla нет капчи при регистрации, что изрядно надоедает когда начинается массовая регистрация роботами на сайте.
В данной статье расскажу, как добавить капчу в joomla при регистрации. По аналогии можно добавить капчу при авторизации. А также, в конце вы можете просто скачать готовое решение и поставить у себя сайте.
Файл с самой капчей captcha.zip я взял уже готовый(из одной известной платной CMS) , немного переделав, получил желаемое.
Все правки мы будем делать в components/com_user/
Нужно распаковать архив captcha.zip в эту папку components/com_user/
1. В файл user.php нужно добавить наш файл с капчей после этой директивы
defined('_JEXEC') or die('Restricted access');
подключить капчу
require_once( JPATH_COMPONENT.DS.'captcha.php' );
2. Далее в файл \views\register\view.html.php
Добавить следующее:
Например, после 73 строки нужно добавить следующее:
в папке views создадим папку capt в ней создадим папку tmpl (в эту папку можно создать пустой default.php) и файл view.html.php
в файле view.html.php запишем код:
Код для вставки:
Скачать готовый архив, его нужно распаковать в эту папку components/com_user/
В данной статье расскажу, как добавить капчу в joomla при регистрации. По аналогии можно добавить капчу при авторизации. А также, в конце вы можете просто скачать готовое решение и поставить у себя сайте.
Файл с самой капчей captcha.zip я взял уже готовый(из одной известной платной CMS) , немного переделав, получил желаемое.
Все правки мы будем делать в components/com_user/
Нужно распаковать архив captcha.zip в эту папку components/com_user/
1. В файл user.php нужно добавить наш файл с капчей после этой директивы
defined('_JEXEC') or die('Restricted access');
подключить капчу
require_once( JPATH_COMPONENT.DS.'captcha.php' );
2. Далее в файл \views\register\view.html.php
Добавить следующее:
class UserViewRegister extends JView3. Теперь добавить в код вывода саму капчу с полем. В файл views\register\tmpl\default.php
{
function display($tpl = null)
{
global $mainframe;
//--наш код
$length=4; //--Количество символов
$charGroup = '0,1,2,3,4,5,6,7,8,9'; //--Какие символы выводить у меня цифры
$charGroup = explode( ',', $charGroup );
srand ((double) microtime() * 1000000000);
$random_string = "";
for($i=0;$i<$length;$i++)
{
$random_char_group = rand(0,sizeof($charGroup)-1);
$random_string .= $charGroup[$random_char_group];
}
//Добавить в сесию код
$session =& JFactory::getSession();
$session->set('menschsession', $random_string);
...
Например, после 73 строки нужно добавить следующее:
<tr>4. Теперь создадим вывод самой картинки капчи. Доступна картинка будет по адресу ?option=com_user&view=capt
<td height="40">
<label id="codemsg" for="code">
Введите код проверки:
</label>
</td>
<td>
<input type="text" id="code" name="code" />
<img src="/?option=com_user&view=capt">
</td>
</tr>
...
в папке views создадим папку capt в ней создадим папку tmpl (в эту папку можно создать пустой default.php) и файл view.html.php
в файле view.html.php запишем код:
5. Осталось проверить код при регистрации, делать это нужно в файле controller.php строка 219 function register_save()
<?php
//--No direct access
defined( '_JEXEC' ) or die( '=;)' );
jimport( 'joomla.application.component.view');
class UserViewCapt extends JView
{
function capt($tpl = null)
{
/*ob_get_clean();
$image_data =Captcha::createImageData();
/*/
$i = new IValidator();
$i->RndCodes = '0123456789';
$i->RndLength = 4;
$i->FontsDir = JPATH_COMPONENT.DS;
$i->generateImage();
exit;
parent::display($tpl);
}
function display($tpl = null)
{
switch ($this->getLayout()) {
default:
$this->capt($tpl);
break;
}
}
}// class
Код для вставки:
function register_save()Демо на этом сайте
{
global $mainframe;
// Check for request forgeries
JRequest::checkToken() or jexit( 'Invalid Token' );
//----Наш код
$session =& JFactory::getSession();
$code = $session->get('menschsession'); //Берем из сессии код
// провека капчи
if ($code!=$_POST['code']) //сравниваем с нашим
{
JError::raiseWarning('', 'Неверный код проверки!'); //если не верно выводим сообщение
$this->register();
return false;
}
...
Скачать готовый архив, его нужно распаковать в эту папку components/com_user/