Хотя Джумла 1.0.15 уже очень устаревшая, но принцип работы движка интересен для понимания работы и более новых версий Джумла. Да и заказ от клиента не только для упрощения модуля входа на сайта Джумла, а и еще для VirtueMart 1.0.15.
В модуле входа Джумла mod_login , который выводится на сайте, есть ссылка- Регистрация. Кликнув на ссылку Регистрация, гость сайт попадает на форму регистрации. В параметрах ссылки есть парматеры для движка Джумла , аи именно- Вызов компонента com_registration и задача register
<a href="/<?php echo sefRelToAbs( 'index.php?option=com_registration&task=register' ); ?>">
В компоненте com_registration по имени задачи определяется функция обработки задачи
case 'register':
registerForm( $option, $mosConfig_useractivation );
break;
function registerForm( $option, $useractivation ) {
HTML_registration::registerForm($option, $useractivation);
}
В функции registerForm вызывается метод HTML класса, в котором и выводится форма регистрации. Отключив в форме регистрации показ поля логина, оставляем показ имени, пароля и капча, у кого она установлена. После заполнения данных в поле, данные отправляются на Джумла в com_registration , где я в поле логина сохраняю значение поля эмэйл, полученного с массива $_POST , и которое в скрипте обработки формы регистрации, связывается с полями таблицы. И заметьте , это без кода MyQSL .
if (!$row->bind( $_POST, 'usertype' )) {
mosErrorAlert( $row->getError() );
}
// draff
$row->name = trim( $row->name );
$row->email = trim( $row->email );
$row->username = trim( $row->email );
Все проверяем созданного пользователя- указываем эмэйл в поле ввода логина. Но еще нужно , чтобы ранее зарегистрировавшиеся пользователи могли входить по своему логину. Форма модуля входа передает данные функции Джумла - login, /includes/joomla.php
// Находим по старому логину или email
// query used for login via login module
$query = "SELECT id, name, username, password, email, usertype, block, gid"
. "\n FROM #__users"
. "\n WHERE username = ". $this->_db->Quote( $username )
. "\n OR email = ".$this->_db->Quote( $username )
;
$this->_db->setQuery( $query );
$this->_db->loadObject( $row );
}
// draff
if($username !== $row ->username && $username !== $row ->email) {
mosErrorAlert( _DO_LOGIN );
exit();
}
Изменяю функцию проверки логина, чтобы сравнивать значение логина и эмэйл .