Хотя Джумла 1.0.15 уже очень устаревшая, но принцип работы движка интересен для понимания работы и более новых версий Джумла. Да и заказ от клиента не только для упрощения модуля входа на сайта Джумла, а и еще для VirtueMart 1.0.15.

В модуле входа Джумла mod_login , который выводится на сайте, есть ссылка- Регистрация. Кликнув на ссылку Регистрация, гость сайт попадает на форму регистрации. В параметрах ссылки есть парматеры для движка Джумла , аи именно- Вызов компонента com_registration и задача register

<a href="/<?php echo sefRelToAbs( 'index.php?option=com_registration&amp;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();
    }

Изменяю функцию проверки логина, чтобы сравнивать значение логина и эмэйл .

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


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