Как сделать капчу в joomla своими руками

Рассмотрим вариант, когда мы создаем форму и уже готовые плагины, позволяющие делать капчу в joomla не подходят. Ну во первых находим код капчи в интернете, какая Вам понравиться. Создаем файл php с каким-то названием вроде img.php. Обычно набор цифр капчи погружают в сесию для дальнейшей проверки. Для доступа к сессиям в joomla нам необходимо перед тем, как генерируется число для капчи подключить некоторые файлы joomla которые запускают сессию.

В joomla 1.5 это первые строки файла index.php который находится в корне сайта.

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
JDEBUG ? $_PROFILER->mark( 'afterLoad' ) : null;
/**
* CREATE THE APPLICATION
*
* NOTE :
*/
$mainframe =& JFactory::getApplication('site');
/**
* INITIALISE THE APPLICATION
*
* NOTE :
*/
// set the language
$mainframe->initialise();

В joomla 1.6 это:

define('DS', DIRECTORY_SEPARATOR);

if (file_exists(dirname(__FILE__) . '/defines.php')) {
	include_once dirname(__FILE__) . '/defines.php';
}

if (!defined('_JDEFINES')) {
	define('JPATH_BASE', dirname(__FILE__));
	require_once JPATH_BASE.'/includes/defines.php';
}

require_once JPATH_BASE.'/includes/framework.php';
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();



Таким образом в нашем файле с кодом капчи, который станет собственно картинкой мы сможем запустить сессию и погрузить в нее числос картинки. Вот код файла img.php с простым кодом капчи (для joomla 1.6).

define('_JEXEC', 1);
define('DS', DIRECTORY_SEPARATOR);

if (file_exists(dirname(__FILE__) . '/defines.php')) {
	include_once dirname(__FILE__) . '/defines.php';
}

if (!defined('_JDEFINES')) {
	define('JPATH_BASE', dirname(__FILE__));
	require_once JPATH_BASE.'/includes/defines.php';
}

require_once JPATH_BASE.'/includes/framework.php';
$mainframe =& JFactory::getApplication('site');
$mainframe--->initialise();

$r=rand(1000,9999);

$session =& JFactory::getSession();
$session->set('capcha', $r);

for($i=0;$i < 7;$i++)//разбиваем секретный код на массив чисел
	$arr[$i]=substr($r,$i,1);

$im=imagecreate(80,40);//создаем картинку
imagecolorallocate($im,255,255,255);
$a=0;
for($i=0;$i < 7;$i++)//наносим код на картинку
{
  $color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
  imagestring($im,rand(2,9),$a+=15,rand(0,20),$arr[$i],$color);
}
header("Content-type: image/jpeg");
imagejpeg($im,'',100);//выводим капчу


Дальше в нашей форме выводим нашу каgчу:

 

Обновить цыфры


Ну и если мы хотим обновить картинку, нужно на jQuery написать такие строки(jQuery должно быть подключено)

function renew()
            {
                
                jQuery("#capcha").html("");
                jQuery("#capcha").html("");
            }


?tp="+Math.random() эта вставка нужна что бы браузер не кешировал картинку

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


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