Действия - РЪКОВОДСТВО ЗА РАЗРАБОТКА НА СИСТЕМА ЗА УПРАВЛЕНИЕ НА УЕБСАЙТ CMS Drupal 7
Действие (действие)е нещо, извършено отDrupal. Ето няколко примера:
Във всеки от тези случаи има ясно определена задача. Програмистите може да отбележат, че този списък е подобен на PHP функциите. Например, имейл съобщение може да бъде изпратено с помощта на функцията drupal_mail() от include/mail.inc. Действията са като функции, защото действията са функции. Тези функцииDrupalмогат да анализират и свободно да се свързват със събития (това ще бъде обсъдено по-долу). Междувременно помислете за тригерния модул.
Потребителски интерфейс на тригера
Изберете елемента от менюто Модули в горната част на страницата и на страницата Модули активирайте задействащия модул. Щракнете върху връзката Структура в горната част на страницата и след това на страницата Структура щракнете върху връзката Тригери. Интерфейс, подобен на показания на фиг. 3.1.

Обърнете внимание на разделите в горната част. Съвпадат сКукиDrupal! На фиг. 3.1 виждаме операциите за възелаhook. Всички те получават удобни имена, например операцията за изтриванеhookна възела е маркирана с текста Задействане: След изтриване на съдържание (Задействане: след изтриване на съдържание). Така че всяка операцияhookсе показва с възможност за присвояване на действие, като например Публикуване на съдържание, когато тази операция се изпълнява. Всички възможни действия са изброени в падащия списък Избор на действие.
Имената на някои тригери със съответните им кукички и операции са дадени в таблица. 3.2.
Таблица 3.2.Връзка между кукички и тригери в Drupal 7
Първо действие
Какво ще трябва да се направи, за да стане пълноценно действие нашата функция по подаване на звуков сигнал?Това изисква две стъпки.
- Кажете наDrupalкои задействания действието трябва да поддържа.
- Създайте самата функция за действие.
Първата стъпка се извършва чрез внедряване на функцията hook_action_info(). В модула за аудиосигнал трябва да изглежда така:
Функцията се нарича beep_action_info(), защото, подобно на други реализации на кука, тя използва името на модула (beep), добавено с иметоhook( action_info ). Функцията връща масив с елементи за всяко действие в модула. Тъй като пишем само едно действие, този масив ще има само един елемент с ключ, съдържащ името на функцията, която изпълнява действието: beep_beep_action() . Когато четете кода, е по-добре веднага да видите, че функцията е действие, така че суфиксът _action се добавя към името на функцията - резултатът е beep_beep_action() . Нека разгледаме по-подробно ключовете в нашия масив.
След като опишем нашето действие, можем да го приложим:
Изобщо не е трудно, нали? Преди да продължите, премахнете реализациите beep_user() и beep_nodeapi(), тъй като ще използваме тригери и действия, а не директни реализации на кука.
Възлагане на действие
Сега щракнете върху връзката Структура в горното меню и след това на страницата Структура кликнете върху връзката Тригери. Ако е направено правилно, вашето действие трябва да е достъпно в потребителския интерфейс, както е показано на Фигура 1. 3.2.

Задайте действие на тригера за запазване на ново съдържание, като изберете Досадно бипкане от падащия списък и щракнете върху бутона Присвояване. След това създайте нов елемент на съдържание от тип Основна страница (Основна страница) изапази го. След като запазите, щракнете върху връзката Отчети в горната част на страницата и изберете отчета за последните записи в журнала. Ако сте създали и конфигурирали действието и тригера правилно, трябва да видите резултати, подобни на тези, показани на Фигура 1. 3.3.
Промяна на тригерите, поддържани от действие
Ако промените стойностите, които определят операциите, поддържани от това действие, промяната трябва да бъде отразена в потребителския интерфейс. Например, ако промените кода beep_action_info(), както е описано по-долу, действието Beep ще бъде достъпно само за тригера След изтриване на възел:
Действия, които поддържат всеки тригер
Ако не искате да ограничите действието си до конкретен тригер или набор от тригери, можете да декларирате, че действието поддържа всеки тригер:
Разширени действия
Простите действия не приемат параметри, не изискват формуляр за конфигурация и са автоматично достъпни за системата. За да кажете наDrupal, че създаденото действие е разширено, изпълнението на функцията hook_action_info() ще трябва да настрои конфигурируемия ключ на TRUE, да изгради формуляр за конфигуриране на действието и да създаде незадължителен манипулатор за валидиране и манипулатор на задължително изпращане за конфигурационния формуляр. Разликите между просто и разширено действие са представени в таблица. 3.3.
Таблица 3.3.Обобщение на разликите между прости и разширени действия
Просто действие | Разширено действие | |
Настроики | Не* | Издирва се |
Формуляр за конфигурация | Не | Задължително |
Наличност | Автоматично | Трябва да създадете екземпляр на дейност, като използвате страницата за администриране на дейности |
Стойността на ключа за конфигуриране в hook_action_info() | НЕВЯРНО | ВЯРНО |
* По избор са налични $object и $context параметри |
Нека създадем разширено действие, което ще издава звуков сигнал няколко пъти. Конкретният брой звукови сигнали може да бъде зададен чрез конфигурационния формуляр. Първо трябва да кажете наDrupal, че това действие може да се конфигурира. Добавете елемент за новото действие към изпълнението на куката action_info в модула beep.module:
Нека бързо проверим дали всичко е направено правилно - за това трябва да изберете елемента от менюто Администриране на действия за конфигурация на сайта (Администриране -> Настройки на сайта -> Действия). Нашето действие трябва да се появи в падащото меню за разширени действия, както е показано на Фигура 1-1. 3.4.

Сега трябва да предоставите формуляр, в който администраторът да посочи желания брой звукови сигнали. За да направите това, трябва да дефинирате един или повече формуляри с помощта на API за формуляри на систематаDrupal. Ще трябва също да напишете функции за валидиране на формуляри и изпращане на данни. Имената на тези функции се основават на идентификатора на действие, дефиниран във функцията hook_action_info(). За нашето действие идентификаторът е във формата beep_multiple_beep_action и по конвенция _form трябва да се добави към името на функцията за дефиниране на формуляр - получаваме beep_multiple_beep_action_form. ВDrupalимето на функцията за валидиране се образува от идентификатора на действие с наставката _validate ( beep_multiple_beep_action_validate ), а името на функцията за изпращане се формира с наставката _submit ( beep_multiple_beep_action_submit).
Първата функция създава описание на формуляр заDrupal. Той определя едно текстово поле, в което администраторът може да въведе броя на позвъняванията. За да отворите формуляра за разширени действия, щракнете върху връзката Конфигурация в горната част на страницата и на страницата за конфигурация, която се отваря, щракнете върху връзката Действия. В долната част на страницата Действия отворете полето за избор на Създаване на разширено действие и щракнете върху Звуков сигнал няколко пъти. След като изберете този елемент, Drupal ще покаже формата за разширена конфигурация на действие, показана на Фигура 1. 3.5.

РамкатаDrupalдобави поле за описание към формуляра за настройка на действие. Текстът в това поле може да бъде променен и използван вместо стандартното описание, дефинирано вhookaction_info. Такива описания могат да бъдат полезни в случаите, когато създавате едно разширено действие с два бипкания и описанието „Две бипкания“ и друго действие с пет бипкания и описанието „Пет бипкания“. Това ви позволява да правите разлика между двете разширени действия, когато са присвоени на тригер. Това означава, че разширените действия могат да бъдат предоставени с описания, които са разбираеми за администратора.
Функцията за валидиране не се различава от другите функции за валидиране на формуляри вDrupal(подробности относно валидирането на формуляри са разгледани в глава 10). В нашия случай просто трябва да проверим дали потребителят наистина е въвел число и това число не е твърде голямо. Стойността, върната от функцията за изпращане за формуляри за конфигуриране на действие, има специална форма. Трябва да е масив с ключове, съдържащи имената на задължителните полета. Стойностите в този масив са налични, когато се извърши действието. Описанието се обработва автоматично, така че трябва самовърне стойността от полето, което сме въвели - т.е. брой бипкания. Е, най-накрая е време да напишем самото разширено действие:
Това действие приема два параметъра - $object и $context. В простото действие, което написахме по-рано, нямаше параметри.