Drush - это мощный инструмент командной строки, который поставляется с множеством полезных команд, позволяющих уменьшить количество шаблонных действий при работе с Drupal. В данной статье мы рассмотрим создание собственных drush команд на примере команды, которая будет выводить на экран заголовок ноды по переданному ей в аргументе nid.
Создание Drush команд в Drupal 7
Для того чтобы добавить кастомную drush команду, мы должны создать собственный модуль и добавить в него файл с именем модуля, который заканчивается на drush.inc. В этом файле нужно реализовать drush_hook_command() и определить в нем нашу команду print-node-title.
/** * Implements hook_drush_command(). */ function my_module_drush_command() { $items = array(); $items['print-node-title'] = array( 'description' => 'Displays the node title by nid', 'aliases' => array('pnt'), 'callback' => 'drush_print_node_title', 'arguments' => array('nid' => 'Node nid'), 'bootstrap' => DRUSH_BOOTSTRAP_DRUSH, ); return $items; }
Рассмотрим параметры нашей команды более подробно:
- description - краткое описание команды;
- aliases - синоним команды;
- callback - функция, которую вызовет команда;
- arguments - массив аргументов;.
- bootstrap - уровень загрузки Drupal.
Также, можно добавить более подробное описание команды для справки. Для этого нужно реализовать hook_drush_help():
/** * Implements hook_drush_help(). */ function my_module_drush_help($section) { switch ($section) { case 'drush:print-node-title': return dt('Displays the node title by nid.'); } }
Далее нам остается только добавить коллбэк функцию, которая будет вызвана drush:
/** * Command callback. */ function drush_print_node_title($nid) { $query = db_select('node', 'n'); $query->fields('n', array('title')); $query->condition('n.nid', $nid); $result = $query->execute(); while ($entry = $result->fetchAssoc()) { drush_print($entry['title']); } }
Чтобы проверить работу новой команды, включаем модуль, переходим в командную строку и запускаем только что созданную команду:
drush pnt node_nid
Если на сайте существует нода с таким nid, то drush выведет на экран ее заголовок.
Создание Drush команд в Drupal 8
Создание пользовательских команд drush в восьмерке делается аналогично. Для этого создаем кастомный модуль и добавляем в него файл module_name.drush.inc. Реализация вышеописанной команды print-node-title в drupal 8 будет выглядеть следующим образом:
<?php /** * Implements hook_drush_help(). */ function my_module_drush_help($section) { switch ($section) { case 'drush:print-node-title': return dt('Displays the node title by nid.'); } } /** * Implements hook_drush_command(). */ function my_module_drush_command() { $items = array(); $items['print-node-title'] = array( 'description' => dt('Displays the node title by nid'), 'aliases' => array('pnt'), 'callback' => 'drush_print_node_title', 'arguments' => array('nid' => 'Node nid'), 'bootstrap' => DRUSH_BOOTSTRAP_DRUSH, ); return $items; } /** * Command callback. */ function drush_print_node_title($nid) { $query = \Drupal::database()->select('node_field_data', 'n'); $query->fields('n', array('title')); $query->condition('n.nid', $nid); $result = $query->execute(); while ($entry = $result->fetchAssoc()) { drush_print($entry['title']); } }
Добавить комментарий