Опытные друпал-разработчики не представляют своей работы без утилиты 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() в созданном файле
Самая важная часть командного файла h - 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 - фаза загрузки друпала, с которой будет работать команда.
