ertttert
Реализация хуков пользователя позволяет модулям реагировать на различные действия, выполняемые с пользовательской учетной записью, и изменять объект $user
. Имеются несколько вариантов функции hook_user
, и каждый вариант предназначен для выполнения своего действия (табл. 6.2).
Таблица 6.2. Функции hook_user
hook_username_alter(&$name, $account) | Изменение пользовательского имени, отображаемого для пользователя |
hook_user_cancel($edit, $account, $method) | Вызывается при отменах пользовательских учетных записей |
hook_user_cancel_methods_alter(&$methods) | Изменение метода отмены учетной записи |
hook_user_categories() | Получение списка параметров пользователя или изменений в информации профиля |
hook_user_delete($account) | Реакция на удаление пользователя |
hook_user_insert(&$edit, $account, $category) | После создания пользовательской учетной записи |
hook_user_load($users) | Работает с объектами пользователей при загрузке из базы данных |
hook_user_login(&$edit, $account) | Сразу после входа пользователя |
hook_user_logout($account) | Сразу после выхода пользователя |
hook_user_operations() | Массовые операции с пользователями |
hook_user_presave(&$edit, $account, $category) | Непосредственно перед созданием или изменением пользовательской учетной записи |
hook_user_role_delete($role) | Информирование других модулей об удалении пользовательской роли |
hook_user_role_insert($role) | Информирование других модулей о добавлении пользовательской роли |
hook_user_role_update($role) | Информирование других модулей об изменении пользовательской роли |
hook_user_update(&$edit, $account, $category) | После изменения пользовательской учетной записи |
hook_user_view($account, $viewmode) | При отображении информации пользовательской учетной записи |
hook_user_view_alter(&$build) | После создания пользователя; модуль может изменить структурированное содержимое |
Функция hook_user_view($account, $view_mode)
используется модулями для добавления информации в страницы профиля пользователя — например, то, что отображается на странице http://example.com/?q=user/1
, показанной на рис. 6.1. Рассмотрим, как модуль блога добавил свою информацию на эту страницу с помощью функции hook_user_view()
:
/** * Реализация hook_user_view(). */ function blog_user_view( $account) { if (user_access('create blog content', $account)) { $account->content['summary']['blog'] =array( '#type' => 'user_profile_item', '#title' => t('Blog'), '#markup' =>l( t('View recent blog entries'),// Просмотреть последние записи блога "blog/$account->uid",array( 'attributes' => array('title' => t("Read !username's latest blog entries.", // Прочитать последние записи блога пользователя !username array('!username' => format_username($account)) ) )) ) , '#attributes' => array('class' => array('blog')),) ; } }
Функция view
заносит некоторую информацию в компонент $user->content
. Информация пользовательского профиля разбита на категории, и каждая категория представляет собой страницу информации о пользователе. На рис. 6.1 показана лишь одна категория summary
, который соответствует категории blog
) и элементы #type
, #title
, #markup
и #attributes
. Тип user_profile_item
указывает уровню темизации Drupal на modules/user/user-profile-item.tpl.php
. Сравнив приведенный фрагмент кода с рис. 6.1, можно понять, как отображаются эти элементы. В листинге 6.1 показано содержимое массива $user->content
, который и отображается на рис. 6.1.
Листинг 6.1.
Array ( [#pre_render] =>Array( [0] => _field_extra_fields_pre_render) [#entity_type] => user [#bundle] => user [#attached] =>Array( [css] =>Array( [0] => modules/field/theme/field.css) ) [summary] =>Array( [blog] =>Array( [#type] => user_profile_item [#title] => Blog// Блог [#markup] => View recent blog entries// Посмотреть последние // записи блога [#attributes] =>Array( [class] =>Array( [0] => blog) ) ) [#type] => user_profile_category [#attributes] =>Array( [class] =>Array( [0] => user-member) ) [#weight] => 5 [#title] => History// История [member_for] =>Array( [#type] => user_profile_item [#title] => Member for// Член [#markup] => 3 days 11 hours// 3 дня 11 часов ) ) [user_picture] =>Array( [#markup] => [#weight] => -10) )
В модуле может быть также реализована функция hook_user_view()
для обработки элементов профилей в массиве $user->content
перед применением темы. Ниже приведен пример, в котором элемент профиля блога просто удален со страницы профиля пользователя. Имя выбрано для функции, которая находится в гипотетическом модуле hide.module
:
/** * Реализация hook_user_view(). */ function hide_user_view( $account, $view_mode = 'full') {unset( $account->content['summary']['blog']) ; }
Всего комментариев: 0 | |