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 будет выглядеть следующим образом:
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']);
}
}
Добавить комментарий