Drush - это мощный инструмент командной строки, который поставляется с множеством полезных команд, позволяющих уменьшить количество шаблонных действий при работе с Drupal. В данной статье мы рассмотрим создание собственных drush команд на примере команды, которая будет выводить на экран заголовок ноды по переданному ей в аргументе nid.

Drush command

Создание 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']);
  }
}

 

 

 

Добавить комментарий