Друпал-розробники зі стажем не уявляють роботи без утіліти Drush (Drupal shell), адже з її допомогою більшість рутинних дій в друпалі випоконуються значно швидше. Перелік стандартних drush-команд, таких як установка модулів, створення дампа бази, скидання пароля для адміна і т.д., можна подивитись на сайті http://drush.ws/. Проте, як там не є, а часто виникає бажання (необхідність) додати власну команду, то ж, як це робиться, ми й розглянемо в даній статті.
Приміром, нам треба створити команду, яка б видаляла всі матеріали певного типу контента. Гадаю, із такою проблемою зіштовхувались більшість із нас. Забігаючи наперед скажу, що синтаксис команди буде таким: drush delete-content %content_type%, де %content_type% - машинне ім'я типа контенту.
Створення drush-команди включає три етапи:
- створення файла example_drush.drush.inc
- виклик hook_drush_command() у створеному файлі
- опис команд
Створення файла example_module.drush.inc
Зазвичай це виконується при написанні нового модуля. Створюємо файли example_drush.info та example_drush.module. Основний файл модуля може бути пустим, проте для коректної роботи drush-комманди модуль мусить бути включений. Далі створюємо командний файл example_drush.drush.inc. Закінчення файла обов'язково мусить містити "drush.inc", аби утіліта розпізнала його як такий, що містить drush-комманди. Drush веде пошук командних файлів у таких папках:
- папка /шлях/до/drush/commands
- папки, перераховані в опції "include"
- загальносистемна папка командних файлів drush. наприклад - /usr/share/drush/commands
- папка ".drush" в домашній папці користувача
- sites/all/drush в діючій інсталяції друпала
- папки включених модулів
Виклик hook_drush_command() у створеному файлі
Найважливіша частина командного файла - hook_drush_command(). В ньому ми даємо опис самих команд та того, як вони будут працювати. Опис команд чимось схожий на опис елементів, що використовуються в hook_menu. Розглянемо основні компоненти:
- aliases - список скорочених назв команд. Наприклад, замість виконання довгої команд "pm-download", можна скористатись "dl". При наявності синонімів "довга" команда все одно будет працювати.
- callback - ім'я функції, яка буде викликатись для виконання команди. Ім'я функції повинно починатись із назви файла. В нашому випадку - це example_drush_. Параметр є опціональним, за умови його відсутності drush_invoke() створить ім'я самостійно.
- description - опис команди.
- arguments - масив параметрів, які розпізнаються функцією. Використовуються лише для команди "drush help".
- required-arguments - по замовчуванню встановлено на FALSE. При установці на TRUE - параметри будуть обов'язковими.
- drupal dependenices - друпал модулі, котрі повинні бути включені.
- drush dependencies - drush-файли, необходні для виконання команди.
- bootstrap - фаза завантаження друпала, з якою команда буде працювати.