Более 1000 проектов разного уровня сложности. Опыт более 10 лет работы в сфере web-программирования

Капча в регистрации 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
Добавить следующее:

class UserViewRegister extends JView
{
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);
...
3. Теперь добавить в код вывода саму капчу с полем. В файл views\register\tmpl\default.php
Например, после 73 строки нужно добавить следующее:

<tr>
<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>
...

4. Теперь создадим вывод самой картинки капчи. Доступна картинка будет по адресу ?option=com_user&view=capt
в папке views создадим папку capt в ней создадим папку tmpl (в эту папку можно создать пустой default.php) и файл view.html.php
в файле view.html.php запишем код:

<?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
5. Осталось проверить код при регистрации, делать это нужно в файле controller.php строка 219  function register_save()

Код для вставки:
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/

Покупка готового скрипта

joomla 3