Блог старого компьютера

Блог старого компьютера


Главная Joomla Пишем капчу для компонента джумлы

Пишем капчу для компонента джумлы

26.01.2012 08:25 Администратор Joomla
Печать PDF

Эта статья является неим продолжением статьи "Делаем простую капчу на PHP" которая была размещена в категории php. Статья бала написана по причинам несколько иной работы CMS Joomla с сессиями. Если в Joomla попытаться вывести массив $_SESSION то в резултате мы получим чистую страницу. Вот в этой статье я и опишу как адаптировать работу с сессиями в joomla на примере капчи.

  И так для тех кто читал статью на которую я дал ссылку выше могут неприменно вникать, а кто не читал все же рекомендую пробежать хотя бы глазами так как тут будет несколько меньше объяснений. Начнем с файла number.php

define( '_JEXEC', 1 ); // защита от прямого вызова
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../' )); // путь к корневому каталогу с Джумлой
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); /* далее включаем необходимые файлы с целью использовать встроенные возможности работы с сессиями */
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$session = JFactory::getSession(); // массив с сессиями
$number = $session->get('number'); // получаем нужное нам значенине
$im = imagecreate(30, 18); // создаем картинку с заданным размером
$bg = imagecolorallocate($im, 129, 140, 212); // закрашиваем фон
$text_color = imagecolorallocate($im, 255, 255, 255); // задаем цвет которым будем писать
imagestring($im,10,2,1,$number, $text_color); // рисуем
Header("Content-type: image/jpeg"); // устанавливаем тип документа
imageJpeg($im,'',100); /* кто внимательно смотрел думаю заметили что в функции добавился параметр 100, он отвечает за качество изображения*/

Ах, да чуть н забыл этот файл я положил в корень компонента рядом с файлом controller.php.

Далее идет файл index.php представлю конечно же не весь файл вам он не нужен да и формы у вас явно другие как собственно и действия над данными:

< ?
$session =JFactory::getSession(); // массив сесий
if(!isset($_POST['name'])){
$rand = rand(100,999); //герерируем случайное число в диапазоне
$session->set('number', $rand ); // устанавливаем
?>
<form action="" method="post" enctype="multipart/form-data">
<table class="table_declaration">
<tr>
<td>Название объявления:</td>
<td><input class="in_declaration" type="text" name="name"></td>
</tr>
<tr>
<td>Введите код: <img src="/components/com_declaration/number.php" /></td>
<td><input class="fi_declaration" type="text" name="number"></td>
</tr>
<tr>
<td><input class="sub_declaration" type="submit" value="Отправить"></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
<?
}
else{
$number = $session->get('number'); // получаем значение из сессий
if($_POST['number']==$number){ // равно ли
}
else{
echo '<div><b>Вы неправильно ввели код с картинки!</b></div>';
}
$rand = rand(100,999); //герерируем случайное число в диапазоне
$session->set('number', $rand ); // устанавливаем
}
?>

 Как вы видите выше путь к файлу number.php который отображает картинку я указал точный.

Вот собствнно и все, а как бонус прилагаю картинку с тем что у меня вышло....

Добавить комментарий


Защитный код
Обновить

Поиск

Голосование

Что Вы думаете на счет битрикса?
 

Все материалы раздела