ertttert
Действия — это функции, которые выполняются в указанный момент. Для простых действий не нужны конфигурируемые параметры. Например, созданное ранее действие Beep
просто выдает звуковой сигнал. Ему не нужна никакая дополнительная информации (хотя, разумеется, параметры $object
и $context
доступны). Сравните это действие с также созданным нами расширенным действием Beep multiple times
(Несколько гудков): ему необходимо знать, сколько нужно звуковых сигналов. Другим расширенным действиям, вроде Send e-mail
(Послать почтовое сообщение), может потребоваться еще более информации: адресат, тема сообщения и т.д. Эти параметры должны храниться в базе данных.
Когда администратор создает экземпляр расширенного действия, информация, введенная в форме конфигурирования, сериализируется и сохраняется в поле parameters
таблицы actions
. Запись для простого действия Beep
может выглядеть следующим образом:
aid : 2type : '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 | |