ertttert
Books-CMS.clan.su

События и триггеры

Обычно при работе с Drupal требуется каким-то образом реагировать на определенные события. Например, администратору сайта может понадобиться почтовое сообщение об отправке посетителем текста на сайт. Или следует заблокировать пользователя, если он употребляет недопустимые слова. В данной главе описано, как реагировать на события Drupal с помощью собственного кода. Drupal при своей работе проходит через последовательность событий. Эти внутренние события — как раз те моменты, когда модулям разрешено взаимодействовать с процессом обработки Drupal. Некоторые события Drupal приведены в табл. 3.1.

Таблица 3.1. Примеры событий Drupal

Событие Тип
Создание ноды node
Удаление ноды node
Просмотр ноды node
Создание пользовательской учетной записи user
Изменение пользовательского профиля user
Вход пользователя  
Выход пользователя  

 

Разработчики Drupal называют эти внутренние события хуками (hook), т.к. при возникновении одного из таких событий Drupal позволяет модулям в этой точке “вмешиваться” (hook into) в путь выполнения. Некоторые хуки уже встречались в предыдущих главах. Обычно при разработке модулей требуется решать, на какие события Drupal необходимо реагировать — т.е. какие хуки нужно реализовать в модуле. Предположим, что вы недавно создали веб-сайт, который обслуживался стоящим в кладовке компьютером. Потом сайт набрал популярность, и вы планируете продать его большой корпорации и получить кучу денег. Между тем, надо каким-то образом получать уведомления о входе пользователей на сайт. Допустим, вы решили, что в это время компьютер должен издавать звуковые сигналы. Но вашей кошке не нравятся такие звуки, когда она спит, и вы решили вместо гудков просто создавать запись в журнале. Вы быстро пишете .info-файл и помещаете его в sites/all/modules/custom/beep/beep.info:

 

name = Beep
description = Simulates a system beep.
package = Pro Drupal Development
core = 7.x
files[] = beep.module

 

После этого необходимо написать модуль sites/all/modules/custom/beep/beep.module:

 

<?php
/**
* @file
* Имитация звукового сигнала.
*/
function beep_beep() {
watchdog('beep', 'Beep!');
}

 

Данный код записывает в журнал Drupal сообщение Beep! — пока этого хватит. А теперь нужно указать среде Drupal, чтобы она имитировала гудок при каждом входе пользователя. Это можно сделать, реализовав в нашем модуле функцию hook_user() и организовав перехват операции login:

 

/**
* Реализация hook_user().
*/
function beep_user($op, &$edit, &$account, $category = NULL) {
if ($op == 'login') {
 beep_beep();
 }
}

 

Оказывается, все совсем не трудно. А как насчет сигналов при добавлении нового контента? Это можно сделать, реализовав в модуле функцию hook_node_insert() и перехватив операцию insert:

 

/**
* Реализация hook_node_insert().
*/
function hook_node_insert($node) {
 beep_beep();
}

 

А если сигнал нужен при добавлении комментария? Тогда можно реализовать функцию hook_comment_insert() и перехватывать операцию insert. Только давайте остановимся на минутку и подумаем. Мы все время делаем одно и то же. И лучше было бы иметь графический пользовательский интерфейс, который позволял бы связать действие (гудок) с любым хуком и любой операцией. Как раз для этого и предназначен встроенный в Drupal модуль триггера. Он позволяет связать действие с заданным событием. В коде событие определяется как уникальное сочетание хука и операции — например, перехват пользователя и операция входа или перехват ноды и операция вставки. При выполнении таких операций модуль trigger.module позволяет запустить выполнение действия. Во избежание путаницы давайте уточним терминологию.

 

  • Событие (event). Обычно в программировании этот термин понимается как сообщение, отправленное от одного компонента системы другим компонентам.
  • Хук (hook). Программный прием, который применяется в Drupal и позволяет модулям вмешиваться в поток управления. Для каждой операции имеются уникальные хуки, которые выполняются для “перехватываемого” объекта (например, hook_node_insert).
  • Триггер (trigger). Специальное сочетание хука и операции, с которым можно связать одно или более действий. Например, действие звукового сигнала можно связать с операцией login хука пользователя.

 

Всего комментариев: 0
Имя *:
Email *:
Код *:


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