ertttert
Books-CMS.clan.su

Хранение действий

Действия — это функции, которые выполняются в указанный момент. Для простых действий не нужны конфигурируемые параметры. Например, созданное ранее действие Beep просто выдает звуковой сигнал. Ему не нужна никакая дополнительная информации (хотя, разумеется, параметры $object и $context доступны). Сравните это действие с также созданным нами расширенным действием Beep multiple times (Несколько гудков): ему необходимо знать, сколько нужно звуковых сигналов. Другим расширенным действиям, вроде Send e-mail (Послать почтовое сообщение), может потребоваться еще более информации: адресат, тема сообщения и т.д. Эти параметры должны храниться в базе данных.

Таблица actions

Когда администратор создает экземпляр расширенного действия, информация, введенная в форме конфигурирования, сериализируется и сохраняется в поле parameters таблицы actions. Запись для простого действия Beep может выглядеть следующим образом:

aid: 2
type: 'system'
callback: 'beep_beep_action'
parameters: (сериализованный массив, содержащий параметр beeps и его значение, т.е. количество гудков)
description: Beep three times

Перед выполнением расширенного действия содержимое поля parameters десериализируется и заносится в параметр $context, который передается действию. Так что количество гудков в экземпляре действия Beep multiple times доступно для функции beep_multiple_.beep_.action() как $context['beeps'].

Идентификаторы действий

В предыдущем разделе обратите внимание на различие в идентификаторах действий для двух записей таблиц. Идентификатор простого действия — это имя выполняющей его функции. Понятно, что имя функции невозможно использовать в качестве идентификаторов расширенных действий, т.к. могут храниться несколько экземпляров одного и того же действия. Поэтому в таких случаях применяются числовые идентификаторы действия (хранимые в таблице базы данных actions_aid). Механизм выполнения действий определяет, нужно ли выполнять процесс извлечения хранимых параметров, проверяя, является ли идентификатор действия числовым. Если он не числовой, действие выполняется без привлечения базы данных. Эта проверка производится очень быстро; Drupal использует такой же подход и в index.php, чтобы отличить контент от константных значений меню.

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


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