ertttert
Процесс входной регистрации начинается тогда, когда пользователь заполняет входную форму (обычно по адресу http://example.com/?q=user
или в блоке) и щелкает на кнопке (Вход).
Подпрограммы проверки входной формы проверяют, не заблокировано ли имя пользователя, не запрещен ли доступ правилом доступа и ввел ли пользователь корректные имя и пароль. Об обнаружении любого из этих противопоказаний выдается сообщение.
Drupal пытается локально выполнить подключение пользователя, для чего ищет строку в таблице users
с совпадающими именем и хешем пароля. При успешно выполненном входе запускаются два хука пользователя (load
и login
), которые могут быть реализованы в ваших модулях, как показано на рис. 6.3.
Операция load
хука пользователя вызывается, когда объект $user
успешно загружен из базы данных в результате вызова user_load()
. Это происходит, когда пользователь выполнил вход, когда из ноды выбрана информация об авторе и в ряде других ситуаций.
Сейчас мы напишем модуль с именем loginhistory
, который будет вести хронологию входов пользователя. Он будет выводить количество входов пользователя на странице My account
(Моя учетная запись). Создайте папку loginhistory
в каталоге sites/all/modules/custom/
и добавьте туда файлы, приведенные в листингах 6.4–6.6. Первым будет файл sites/all/modules/custom/loginhistory/loginhistory.info
.
Листинг 6.4.
name = Login Historydescription = Keeps track of user logins.package = Pro Drupal Developmentcore = 7.xfiles[] = loginhistory.installfiles[] = loginhistory.module
Нам понадобится файл .install
для создания таблицы в базе данных, что-бы хранить информацию о входах — sites/all/modules/custom/loginhistory/loginhistory.install
.
Листинг 6.5.
<?php/** * Реализация hook_schema(). */ function loginhistory_schema() { $schema['login_history'] =array( 'description' => 'Stores information about user logins.',// Хранит информацию о входах пользователя 'fields' =>array( 'uid' =>array( 'type' => 'int','unsigned' => TRUE,'not null' => TRUE,'description' => 'The {user}.uid of the user logging in.',// {user}.uid пользователя, выполняющего входную регистрацию. ) ,'login' =>array( 'type' => 'int','unsigned' => TRUE,'not null' => TRUE,'description' => 'Unix timestamp denoting time of login.',// Метка времени Unix о времени входа. ) ,) ,'index' =>array( 'uid') ,) ;return $schema; }
Листинг 6.6. Файл loginhistory. module
<?php/** * @file * Отслеживает входы пользователя. */ /** * Реализация hook_user_login. */ function loginhistory_user_login( &$edit, $account) {// Добавление новой записи при каждом входе пользователя. $nid = db_insert('login_history')->fields(array( 'uid' => $account->uid,'login' => $account->login ))->execute(); }/** * Реализация hook_user_view_alter. */ function loginhistory_user_view_alter( &$build) { global $user;// Подсчет входов пользователя. $login_count =db_query( "SELECT count(*) FROM {login_history} where uid = :uid",array( ':uid' => $user->uid) ) ->fetchField();// Добавление на страницу пользователя количества его входов $build['summary']['login_history'] =array( '#type' => 'user_profile_item','#title' =>t( 'Number of logins') ,// Количество входов '#markup' => $login_count,'#weight' => 10,) ; }
После инсталляции этого модуля каждая успешная входная регистрация пользователя будет запускать операцию login
хука hook_user_login
, на которую модуль будет отвечать вставкой записи в таблицу login_history
базы данных. Когда во время работы хука hook_user_view
загружается объект $user
, будет вызвана функция hook_user_view_alter
, и модуль добавит текущее количество входов для данного пользователя на просматриваемую страницу (Моя учетная запись), как показано на рис. 6.4.
Если у вас есть учетная запись на сайте http://drupal.org, вы можете увидеть эффект предоставления категорий пользовательской информации. Для этого выполните вход и щелкните на ссылке
(Моя учетная запись); на открывшейся странице вы можете предоставить информацию о себе в нескольких категориях: участие в разработке Drupal, личная информация, рабочая информации и желание получать извещения о новостях.Всего комментариев: 1 | ||
| ||