ertttert
Books-CMS.clan.su

Хуки пользователя

Реализация хуков пользователя позволяет модулям реагировать на различные действия, выполняемые с пользовательской учетной записью, и изменять объект $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) После создания пользователя; модуль может изменить структурированное содержимое
Внимание! Не путайте параметр $account во многих функциях хуков пользователя с глобальным объектом $user. Параметр $account представляет собой объект $user для обрабатываемой в данный момент учетной записи. Глобальный объект $user — это пользователь, который в данный момент выполнил вход. Обычно они совпадают, но не всегда.

Функция hook_user_view($account, $view_mode)

Функция 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 показана лишь одна категория History (История). Внешний массив должен быть индексирован именем категории. В данном примере использован ключ summary, который соответствует категории History (конечно, лучше, если имена ключа и категории совпадают). Внутренний массив (или массивы) должен содержать уникальный текстовый ключ (в данном случае 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. Структура $user->content

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
Имя *:
Email *:
Код *:


Бесплатный конструктор сайтов - uCoz