ertttert
Каким образом Drupal узнает, какие триггеры доступны для вывода в пользовательском интерфейсе? Обычно Drupal позволяет модулям определять хуки с объявлениями, какие триггеры реализованы в этих модулях. Вот, к примеру, простая реализация функции hook_trigger_info()
из самого модуля Triggers
, который определяет все стандартные триггеры, доступные после установки ядра Drupal 7:
/** * Реализация hook_trigger_info(). * * Определение всех триггеров. */ function trigger_trigger_info() {return array( 'node' =>array( 'node_presave' =>array( 'label' =>t(' When either saving new content or updating existing content') ,// При сохранении нового контента или обновлении существующего контента ) ,'node_insert' =>array( 'label' =>t( 'After saving new content') ,// После сохранения нового контента ) ,'node_update' =>array( 'label' =>t( 'After saving updated content') ,// После сохранения измененного контента ) ,'node_delete' =>array( 'label' =>t( 'After deleting content') ,// После удаления контента ) ,'node_view' =>array( 'label' =>t( 'When content is viewed by an authenticated user') ,// При просмотре контента аутентифицированным пользователем ) ,) ,'comment' =>array( 'comment_presave' =>array( 'label' =>t( 'When either saving a new comment or updating existing comment') ,// При сохранени нового комментария или изменении существующего комментария ) ,'comment_insert' =>array( 'label' =>t( 'After saving a new comment') ,// После сохранения нового комментария ) ,'comment_update' =>array( 'label' =>t( 'After saving an updated comment') ,// После сохранения измененного комментария ) ,'comment_delete' =>array( 'label' =>t( 'After deleting a comment') ,// После удаления комментария ) ,'comment_view' =>array( 'label' =>t( 'When a comment is being viewed by an authenticated user') ,// При просмотре комментария аутентифицированным пользователем ) ,) ,'taxonomy' =>array( 'taxonomy_term_insert' =>array( 'label' =>t( 'After saving a new term to the database') ,// После сохранения нового термина в базе данных ) ,'taxonomy_term_update' =>array( 'label' =>t( 'After saving an updated term to the database') ,// После сохранения измененного термина в базе данных ) ,'taxonomy_term_delete' =>array( 'label' =>t( 'After deleting a term') ,// После удаления термина ) ,) ,'system' =>array( 'cron' =>array( 'label' =>t( 'When cron runs') ,// При запуске cron ) ,) ,'user' =>array( 'user_presave' =>array( 'label' =>t( 'When either creating a new user account or updating an existing') ,// При создании новой пользовательской учетной записи или изменении существующей ) ,'user_insert' =>array( 'label' =>t( 'After creating a new user account') ,// После создания новой пользовательской учетной записи ) ,'user_update' =>array( 'label' =>t( 'After updating a user account') ,// После изменения пользовательской учетной записи ) ,'user_delete' =>array( 'label' =>t( 'After a user has been deleted') ,// После удаления пользователя ) ,'user_login' =>array( 'label' =>t( 'After a user has logged in') ,// После входа пользователя ) ,'user_logout' =>array( 'label' =>t( 'After a user has logged out') ,// После выхода пользователя ) ,'user_view' =>array( 'label' =>t( "When a user's profile is being viewed") ,// При просмотре пользовательского профиля ) ,) ,) ; }
Как видно по структуре функции, каждая категория триггера (т.е. node
, comment
, system
и user
) возвращает массив опций, которые отображаются на странице конфигурирования триггеров. В каждом таком массиве категории определяется триггер и метка, которая отображается на странице настройки триггеров, наподобие приведенной ниже, где node_insert
— имя триггера, а значение, связанное с элементом метки — это то, что отображается на странице (Конфигурация триггера).
Если добавить в модуль аннотации из главы 2 хуки, то эти хуки могут выглядеть следующим образом:'node_insert' =>array( 'label' =>t( 'After saving new content') ,)
После очистки кэша Drupal возьмет новую реализацию/** * Реализация hook_trigger_info(). */ function annotate_trigger_info() {return array( 'annotate' =>array( 'annotate_insert' =>array( 'label' =>t( 'After saving new annotations') ,// После сохранения новых аннотаций ) ,'annotate_update' =>array( 'label' =>t( 'After saving updated annotations') ,// После сохранения измененных аннотаций ) ,'annotate_delete' =>array( 'label' =>t( 'After deleting annotations') ,// После удаления аннотаций ) ,'annotate_view' =>array( 'label' =>t( 'When annotation is viewed by an authenticated user') ,// При просмотре аннотаций аутентифицированным пользователем ) ,) ,) ; }
hook_trigger_info()
и изменит страницу триггеров, т.е. добавит отдельную вкладку для хука Annotate
, как показано на рис. 3.7. Конечно, сам модуль все так же отвечает за инициацию хуков с помощью module_invoke()
или module_invoke_all()
и за запуск выполнения действий. В нашем примере модулю нужно выполнить вызов module_invoke_all ('annotate_insert', 'annotate_update', 'annotate_delete', 'annotate_view')
. Тогда потребуется реализовать hook_annotate_insert
, hook_annotate_update
, hook_annotate_delete
или hook_annotate_view
и запускать действия с помощью actions_do()
.
Всего комментариев: 0 | |