Joomla: Регистрация пользователей

Здравствуйте, дорогие читатели, сегодня я хочу рассмотреть процесс регистрации пользователей в Joomla от начала и до самого конца. Итак, начнем с того, для чего же нужна регистрация и что она затем дает пользователю. Вики дает нам следующее определение регистрации:

Регистрация — 1) запись, фиксация фактов или явлений с целью учёта и придания им статуса официально признанных актов (регистрация рождения, брака); 2) внесение в список, в книгу учёта.

Для нас подходит вторая часть определения — внесение в список. Да, регистрация — это внесение пользователя в базу данных пользователей сайта. Обычно, при регистрации достаточно указывать свой логин и пароль — это те данные, которые однозначно идентифицируют каждого пользователя на сайте. Конечно, можно было бы обойтись одним логином или паролем, но тогда было бы сложно проверить, что человек, который вводит этот логин и пароль действительно тот, за кого себя выдает — любой может представиться Васей Пупкиным или сказать пароль «Владивосток» и спокойно войти на сайт.

Форма авторизации

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

В Joomla за регистрацию отвечает компонент com_users. Для отображения формы входа в любом месте сайта используется модуль mod_login. Этот же модуль обычно отображает ссылки на страницы Регистрации и Восстановления пароля.

mod_login в joomla

Для того, чтобы была возможна регистрация пользователей, такая опция должна быть включена в настройках сайта:

Необходимые настройки Joomla

Если регистрация пользователей включена, то в модуле mod_login должна отображаться ссылка на страницу регистрации.

Посмотрим, как можно изменить внешний вид формы авторизации. В Joomla 1.5 для формы авторизации уже предусмотрена система шаблонизации, шаблон находится в файле /modules/mod_login/tmpl/default.php

Будем рассматривать содержимое файла по строкам и разбираться что за что отвечает.

<?php if($type == ‘logout’) :  ?><form action=»index.php» method=»post» name=»login»  id=»form-login»>< ?php if ($params->get(‘greeting’)) : ?>
<div>
<?php if ($params->get(‘name’)) : {
echo JText::sprintf( ‘HINAME’, $user->get(‘name’) );
} else : {
echo JText::sprintf( ‘HINAME’, $user->get(‘username’) );
} endif; ?>
</div>
<?php endif; ?>
<div align=»center»>
<input type=»submit» name=»Submit» value=»<?php echo JText::_( ‘BUTTON_LOGOUT’); ?/>» />
</div>
<input type=»hidden» name=»option» value=»com_user» />
<input type=»hidden» name=»task» value=»logout» />
<input type=»hidden» name=»return» value=»<?php echo $return; ?/>» />
</form>
<?php else : ?>

Это первая часть кода, которая выполняется, когда пользователь находится в системе. Как видим, здесь отображается логин пользователя или его реальное имя, и кнопка выхода из системы. Вторая часть кода отвечает за авторизацию пользователя. Если разрешена авторизация средствами OpenID, то отображается соответствующая форма. Проверить, разрешена ли, можно в админке, нужно соответствующий модуль.

<?php if(JPluginHelper::isEnabled('authentication', 'openid')) :
$lang->load( 'plg_authentication_openid', JPATH_ADMINISTRATOR );
$langScript =     'var JLanguage = {};'.
' JLanguage.WHAT_IS_OPENID = ''.JText::_( 'WHAT_IS_OPENID' ).'';'.
' JLanguage.LOGIN_WITH_OPENID = ''.JText::_( 'LOGIN_WITH_OPENID' ).'';'.
' JLanguage.NORMAL_LOGIN = ''.JText::_( 'NORMAL_LOGIN' ).'';'.
' var modlogin = 1;';
$document = &JFactory::getDocument();
$document->addScriptDeclaration( $langScript );
JHTML::_('script', 'openid.js');
endif; ?>

Следующий код отвечает за форму авторизации. Она большая и имеет много параметров, поэтому буду рассматривать ее меньшими блоками:

<form action="<?php echo JRoute::_( 'index.php', true, $params->get('usesecure')); ?>" method="post" name="login" id="form-login" >

Начало формы, адрес страницы, параметры безопасности и метод передачи данных.

<?php echo $params-&gt;get('pretext'); ?>

Вывод приветственного текста, если таковой имеется.

<fieldset>

Начало списка полей на форме.

<p id="form-login-username">
 <label for="modlgn_username"><?php echo JText::_('Username') ?></label><br />
 <input id="modlgn_username" type="text" name="username" alt="username" size="18" />
</p>
 <p id="form-login-password">
 <label for="modlgn_passwd"><?php echo JText::_('Password') ?></label><br />
 <input id="modlgn_passwd" type="password" name="passwd" size="18" alt="password" />
</p>

Отображение формы для ввода логина и пароля.

<?php if(JPluginHelper::isEnabled('system', 'remember')) : ?>
 <p id="form-login-remember">
 <label for="modlgn_remember"><?php echo JText::_('Remember me') ?></label>
 <input id="modlgn_remember" type="checkbox" name="remember" value="yes" alt="Remember Me" />
 </p>
 <?php endif; ?>

Если в системе разрешено сохранение сессии (галка Запомнить меня), то выводим и ее.

<input type="submit" name="Submit" value="<?php echo JText::_('LOGIN') ?>" />
 </fieldset>

Кнопка Войти и конец списка полей для ввода.

Дальше выводятся системные сообщения и ссылки на страницы восстановления пароля.

<ul>
 <li>
 <a href="<?php echo JRoute::_( 'index.php?option=com_user&amp;view=reset' ); ?>">
 <?php echo JText::_('FORGOT_YOUR_PASSWORD'); ?></a>
 </li>
 <li>
 <a href="<?php echo JRoute::_( 'index.php?option=com_user&amp;view=remind' ); ?>">
 <?php echo JText::_('FORGOT_YOUR_USERNAME'); ?></a>
 </li>
 <?php
 $usersConfig = &amp;JComponentHelper::getParams( 'com_users' );
 if ($usersConfig->get('allowUserRegistration')) : ?>
 <li>
 <a href="<?php echo JRoute::_( 'index.php?option=com_user&amp;view=register' ); ?>">
 <?php echo JText::_('REGISTER'); ?></a>
 </li>
 <?php endif; ?>
 </ul>

После ссылок на страницы восстановления логина/пароля выводится пост-текст, который можно настроить в параметрах модуля, точно также, как и текст перед формой.

<?php echo $params->get('posttext'); ?>

Файл заканчивается выводом дополнительных параметров, которые передаются скрипту — имя используемого компонента, адрес возврата для страницы — куда попадет пользователь после успешной авторизации и токен безопасности

<input type="hidden" name="option" value="com_user" />
 <input type="hidden" name="task" value="login" />
 <input type="hidden" name="return" value="<?php echo $return; ?>" />
 <?php echo JHTML::_( 'form.token' ); ?>
</form>
<?php endif; ?>

UPD: Ссылка на страницу регистрации не отображается в шаблоне не по умолчанию. Причина пока не ясна.

Вот таким вон хитрым и веселым способом выводится форма авторизации на сайте.
На десерт — видео о сотрудниках CISCO — людях, которые делают корпорацию тем, что она есть.

Александр Бармин

  • Дмитрий

    Заменил стандартный модуль регистрации на mod_cblogin.zip, но теперь при установке уровня доступа к статье (участники) выводится ссылка (
    Зарегистрируйтесь для просмотра полной версии…) для старого модуля. Как её изменить для cblogin?

  • http://sCOkeLHC.livejournal.com Keyhott

    Просматриваю статьи у вас уже небольшое время!!! И говорю щас что буду продолжать читать ваши статьи :)

    • Mike

      Сорри, случйано не туда ткнул «понравилось». Понравилось относится к отзыву Figaro

  • Figaro

    В этой статье говориться об регистрации юзеров «от начала до конца», хотя на самом деле речь идет об простом отображении форм и о самом процессе регистрации не сказано ни слова… Чтоб было понятней автору скажу, что искал решение, где расписаны принципы регистрации опираясь на API.
    Так что, благодаря первому абзацу и поисковой выдаче, статье тройка — тема сисек раскрыта не полностью!

  • Kler

    Я тоже ожидала, что будет все раскрыто полностью…а не отображение форм, что мне вовсе не нужно

  • гость

    вслух пишется слитно, см в шапке

РЕКЛАМА
СЧЕТЧИКИ
 
ДРУЗЬЯ САЙТА
МОИ ПРОЕКТЫ
  • theLesenok.ru
  • 7genkov.ru