Làm thế nào để điều chỉnh tên của lệnh Drush tùy chỉnh?


7

Tôi đã thấy câu trả lời thú vị cho câu hỏi về " Làm thế nào tôi có thể nhận được danh sách các loại nội dung với drush? ", Bắt đầu như vậy:

Bạn có thể tạo một lệnh drush có tên content-type-list.

Nhưng tôi tự hỏi nó sẽ trông như thế nào nếu lệnh nên được đặt tên khác, ví dụ mijn-contenttypes-lijst(thay vì content-type-list) và sử dụng drush drush mcl(thay vì drush ctl)?

Một số lý do tại sao tôi có thể muốn sử dụng tên khác:

  • Bởi vì nó mâu thuẫn với thứ khác trong Drupal mà tôi đã sử dụng content-type-listvà / hoặc ctl.
  • Lệnh này rất khó nhớ (ví dụ vì nó không phải bằng ngôn ngữ mẹ đẻ của tôi), vì vậy tôi muốn điều chỉnh nó thành tên khác.

Chính xác thì tôi sẽ phải thay đổi mã bao gồm trong câu trả lời đó, hiện tại trông như thế nào:

<?php
/**
 * @file
 * Drush commands related to Content Types.
 */

/**
* Implements hook_drush_command().
*/
function drush_content_types_drush_command() {
  $items['content-type-list'] = array(
    'description' => dt("Show a list of available content types."),
    'aliases' => array('ctl'),
  );
  return $items;
}

/**
 * Callback for the content-type-list command.
 */
function drush_drush_content_types_content_type_list() {
  $content_types = array_keys(node_type_get_types());
  sort($content_types);

  drush_print(dt("Machine name"));
  drush_print(implode("\r\n", $content_types));
}

PS: Tôi hiểu rằng tôi cũng có thể tạo bí danh cho nó (như thể hiện trong câu trả lời được liên kết), nhưng đó không phải là câu hỏi của tôi. Ví dụ, nếu tôi muốn một lệnh làm một cái gì đó khác nhau.

Câu trả lời:


6

Sử dụng mã trong câu trả lời của tôi cho " Làm cách nào tôi có thể nhận được danh sách các loại nội dung với drush? ", Bạn có thể làm một cái gì đó như thế này:

Tên tập tin của bạn là MY_MODULE_NAME.drush.inc

<?php
/**
 * @file
 * Drush commands related to Content Types.
 */

/**
* Implements hook_drush_command().
*/
function MY_MODULE_NAME_drush_command() {
  $items['MY-DRUSH-CMD'] = array(
    'description' => dt("Show a list of available content types."),
    'aliases' => array('MD-CMD', 'another-alias', 'and-other'),
  );
  return $items;
}

/**
 * Callback for the MY-DRUSH-CMD command.
 * See here that you must change the - by a _
 * (MY-DRUSH-CMD by MY_DRUSH_CMD) in the callback function
 */
function drush_MY_MODULE_NAME_MY_DRUSH_CMD() {
  $VAR = array_keys(node_type_get_types());
  sort($VAR);

  drush_print(dt("Machine name"));
  drush_print(implode("\r\n", $VAR));
}

Trong mảng bí danh, bạn có thể thêm nhiều bí danh.

Cài đặt mô-đun, chạy drush cc drushđể xóa bộ đệm ẩn và sử dụng lệnh như thế này:

Bạn có thể dùng:

drush MY-DRUSH-CMD
drush MD-CMD
drush another-alias
drush and-other

Người giới thiệu:


Hừm, có vẻ như một câu trả lời từ một giáo viên (với các trường hợp trên, v.v.) thật khó hiểu. Tuy nhiên tôi vẫn có một sự tò mò nhỏ (để làm cho nó hoàn toàn tuân thủ "nội dung" tương đương với "content_types" ban đầu của bạn: bạn có đồng ý rằng tôi có thể thay đổi 3 lần xuất hiện của "content_types" trong câu trả lời của bạn thành "nội dung" không? Tò mò: là $ conten_type (như matrixbe naem) có chủ ý (để tránh một số xung đột), hay chỉ là một lỗi đánh máy?
Pierre.Vriens

@ Pierre.Vriens Tôi đã thực hiện một số thay đổi, để giải thích rõ hơn câu trả lời, hãy xem và cho tôi biết nếu bạn có câu hỏi khác
Adrian Cid Almaguer

7

Bạn sẽ phải thay đổi một vài điều:

/**
 * Implements hook_drush_command().
 */
function drush_content_types_drush_command() {
  $items['mijn-contenttypes-lijst'] = array(
    'description' => dt("Show a list of available content types."),
    'aliases' => array('mcl'),
  );
  return $items;
}

Khóa mảng dưới $ item và giá trị "bí danh" theo nhu cầu đó đã thay đổi. Khóa mảng được sử dụng để xác định cuộc gọi lại để gọi khi sử dụng lệnh drush hoặc bí danh. Vì lý do gọi lại, vì bất kỳ lý do gì, không bắt đầu bằng tiền tố tệp lệnh mà chỉ bắt đầu bằng "drush" và sau đó là tiền tố tệp lệnh và sau đó là khóa mảng được liệt kê ở trên thay thế dấu gạch ngang bằng dấu gạch dưới. Vì vậy, chức năng (gọi lại) thứ hai sẽ trông giống như ...

/**
 * Callback for the content-type-list command.
 */
function drush_drush_content_types_mijn_contenttypes_lijst() {
  $content_types = array_keys(node_type_get_types());
  sort($content_types);

  drush_print(dt("Machine name"));
  drush_print(implode("\r\n", $content_types));
}

Thực hiện những thay đổi đó sẽ cung cấp cho bạn những gì bạn muốn. Thông tin thêm về việc tạo các lệnh drush của riêng bạn có thể được tìm thấy ở đây: Author Authoring


Hay đấy, Merci! Tôi nhận ra rằng nó chỉ trong một bình luận, nhưng để thống nhất tôi chắc chắn rằng "Gọi lại cho lệnh danh sách kiểu nội dung". nên là "Gọi lại cho lệnh mijn-contenttypes-lijst.". Không? Ngoài ra, còn phần "content_types" trong tên hàm đầu tiên thì sao?
Pierre.Vriens

Vâng, bạn nên thực hiện những thay đổi mà bạn đề cập. Tôi chỉ đơn giản là bỏ lỡ các ý kiến ​​vì những phần đó có thể được sao chép mà không gây ra lỗi. Bạn thậm chí có thể thêm nhiều ngữ cảnh vào chức năng đang làm gì trong các bình luận.
Alex Finnarn 7/07/2016

4

Xem thêm lệnh drushify trên drupal.org.

drushify là một trình tạo mã đơn giản tạo ra một mẫu khung lệnh Drush cho mô-đun bạn chỉ định.

Cài đặt

drush dl drushify

Sử dụng

drush @site drushify modulename

Cảm ơn bạn Greg, tôi đã không biết về điều này. Tuy nhiên, có bất kỳ tài liệu nào về mô-đun này không (README.txt không trợ giúp và không có "Tài liệu đọc" trên trang dự án). Bạn có biết bất kỳ liên kết nào trong đó nó cho thấy mã được tạo như thế nào không?
Pierre.Vriens

Tệp mẫu được sử dụng bởi Drushify có tại đây: cgit.drupalcode.org/drushify/tree/temsheet/commandfile.tmpl . Ngoài ra, chỉ cần tải xuống theo README và chạy nó để xem đầu ra.
greg_1_anderson

Tôi đã xem mẫu đó, nhưng nếu bạn đang dạy ai đó về điều này, thì đó không phải là một ví dụ lý tưởng để sử dụng. Đó là lý do tại sao tôi hỏi về "mã được tạo". Tất nhiên, để cài đặt modue khá thuận lợi (tiêu chuẩn), nhưng "theo README" (tại cgit.drupalcode.org/drushify/tree/README.txt tôi không rõ) (1 dòng nội dung). Tôi sẽ làm thêm một số bài tập về nhà sau này.
Pierre.Vriens

3

... Hãy nói trước điều này bằng cách nói rằng câu hỏi của bạn thực sự có vẻ như bạn nên tạo ra một alais, nhưng vì bạn đang hỏi rõ ràng cách tạo một lệnh hoàn toàn mới của riêng bạn với một tên mới, đây là những gì bạn có thể làm:

Bạn cần thay đổi khóa mảng trong hàm hook_drush_command cũng như tên của hàm gọi lại. Bạn có thể tạo một tệp có tên drush_foo và xác định bất kỳ lệnh nào bạn muốn. Lưu ý rằng khóa mảng từ hàm hook_drush_command giống như tên hàm gọi lại (ngoại trừ dấu gạch nối được thay thế bằng dấu gạch dưới). Hãy thử một cái gì đó như thế này:

<?php
/**
 * @file
 * Drush commands related to [insert description here].
 */

/**
* Implements hook_drush_command().
*/
function drush_foo_drush_command() {
  $items['mijn-contenttypes-lijst'] = array(
    'description' => dt("Do something awesome"),
    'aliases' => array('mcl'),
  );
  return $items;
}

/**
 * Callback for the mijn-contenttypes-lijst command.
 * Notice that this function name ends with mijn-contenttypes-lijst
 * except hyphens are replaced with underscores.
 */
function drush_drush_foo_mijn_contenttypes_lijst() {
  // Do something amazing (or call some other existing drush callback function)
}

Ngoài ra, đừng quên rằng bất cứ khi nào bạn thêm (hoặc sửa đổi) lệnh drush, bạn LUÔN LUÔN chạy drush cc drushđể drush có thể xóa bộ nhớ cache của chính nó và thấy rằng có một lệnh mới


Nếu tôi sẽ tạo một bí danh "danh sách kiểu nội dung" và giả sử rằng tôi đã có một "danh sách kiểu nội dung" (làm một cái gì đó hoàn toàn khác), thì tôi nghĩ việc tạo một bí danh sẽ làm điều đó rất giống nhau " hoàn toàn khác biệt "(thay vì bất cứ điều gì tôi muốn cmd" mijn-contenttypes-lijst "của tôi sẽ làm). Hay tôi vẫn còn thiếu một cái gì đó? Ngoài ra, nếu tên mô-đun của tôi là "foo", trong đó thực hiện hook_drush_command, tại sao tên của hàm đầu tiên không chỉ đơn giản là foo_drush_command? Có phải drush yêu cầu "drush_" khi bắt đầu tên hàm đầu tiên không?
Pierre.Vriens

Bạn nói đúng rằng bạn không nên sử dụng bí danh nếu bạn muốn một lệnh làm điều gì đó khác biệt ... nhưng câu hỏi của bạn hơi mơ hồ. Có vẻ như @adrian và tôi đã cho bạn về cơ bản cùng một câu trả lời, vì vậy bạn nên đi thật tốt
thổi vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.