Здравствуйте, дорогие читатели, сегодня я хочу рассмотреть процесс регистрации пользователей в Joomla от начала и до самого конца. Итак, начнем с того, для чего же нужна регистрация и что она затем дает пользователю. Вики дает нам следующее определение регистрации:
Регистрация — 1) запись, фиксация фактов или явлений с целью учёта и придания им статуса официально признанных актов (регистрация рождения, брака); 2) внесение в список, в книгу учёта.
Для нас подходит вторая часть определения — внесение в список. Да, регистрация — это внесение пользователя в базу данных пользователей сайта. Обычно, при регистрации достаточно указывать свой логин и пароль — это те данные, которые однозначно идентифицируют каждого пользователя на сайте. Конечно, можно было бы обойтись одним логином или паролем, но тогда было бы сложно проверить, что человек, который вводит этот логин и пароль действительно тот, за кого себя выдает — любой может представиться Васей Пупкиным или сказать пароль «Владивосток» и спокойно войти на сайт.
Теперь, мы определили точно, что пара логин-пароль однозначно идентифицируют пользователя на сайте, помогают удостовериться, что пользователь выдает себя за того, кем он является на самом деле.
В Joomla за регистрацию отвечает компонент com_users. Для отображения формы входа в любом месте сайта используется модуль mod_login. Этот же модуль обычно отображает ссылки на страницы Регистрации и Восстановления пароля.
Для того, чтобы была возможна регистрация пользователей, такая опция должна быть включена в настройках сайта:
Если регистрация пользователей включена, то в модуле 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->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&view=reset' ); ?>">
<?php echo JText::_('FORGOT_YOUR_PASSWORD'); ?></a>
</li>
<li>
<a href="<?php echo JRoute::_( 'index.php?option=com_user&view=remind' ); ?>">
<?php echo JText::_('FORGOT_YOUR_USERNAME'); ?></a>
</li>
<?php
$usersConfig = &JComponentHelper::getParams( 'com_users' );
if ($usersConfig->get('allowUserRegistration')) : ?>
<li>
<a href="<?php echo JRoute::_( 'index.php?option=com_user&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 — людях, которые делают корпорацию тем, что она есть.