カスタムDrushコマンドの名前を適応させる方法は?


7

drushを使用してコンテンツタイプのリストを取得するにはどうすればよいですか?」に関する質問への興味深い答えを見ました。

という名前のDrushコマンドを作成できますcontent-type-list

しかし、コマンドの名前をmijn-contenttypes-lijst(の代わりにcontent-type-list)別の名前にして、drushをdrush mcl(の代わりにdrush ctl)使用するとどうなりますか?

別の名前を使用する理由のいくつか:

  • それは私がすでに使用されているためにDrupalの中に何か他のものと競合するため、content-type-listおよび/またはctl
  • コマンドは覚えにくい(たとえば、母国語ではないため)ので、別の名前に変更したいと思います。

その答えに含まれているコードで正確に何を変更する必要がありますか?

<?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:(リンクされた回答に示されているように)エイリアスを作成することもできることは理解していますが、それは私の質問ではありません。例えば、何か違うことをするコマンドが欲しいなら。

回答:


6

drushでコンテンツタイプのリストを取得するにはどうすればよいですか?」に対する私の回答のコードを使用すると、次のようなことができます。

ファイルの名前は 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));
}

aliases配列では、さらにエイリアスを追加できます。

モジュールをインストールし、実行drush cc drushしてDrushキャッシュをクリアし、次のようなコマンドを使用します。

以下を使用できます。

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

参照:


うーん、それは先生からの答え(大文字のケースなどを含む)のように理解するのは難しいです。しかし、私はまだ1つの小さな好奇心を持っています(私の「contenttypes」を元の「content_types」と同等に完全に準拠させるために:「contenttypes」への回答の「content_types」の3つの出現を「contenttypes」に安全に変更できることに同意しますか?追加好奇心:$ conten_typeは(variabe naemとして)意図的なものですか(競合を回避するため)、単なるタイプミスですか?
Pierre.Vriens

@ Pierre.Vriens私はいくつかの変更を行いました。答えをよりよく説明するために、他の質問があるかどうかを調べて教えてください
Adrian Cid Almaguer

7

いくつか変更する必要があります。

/**
 * 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;
}

$ itemsの下の配列キーとその下の「aliases」値を変更する必要があります。配列キーは、drushコマンドまたはエイリアスを使用するときに呼び出すコールバックを識別するために使用されます。コールバックは、何らかの理由で、コマンドファイルのプレフィックスで始まるのではなく、「drush」で始まり、次にコマンドファイルのプレフィックスで始まり、次にダッシュをアンダースコアに置き換えて上記の配列キーを押します。したがって、2番目の(コールバック)関数は次のようになります...

/**
 * 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));
}

これらの変更を行うと、必要なものが得られます。独自のDrushコマンドの作成の詳細については、こちらをご覧ください:コマンドオーサリング


いいね、慈悲!私はそれがコメントだけにあることに気づきますが、一貫性を保つために、「content-type-listコマンドのコールバック」は確かです。「mijn-contenttypes-lijstコマンドのコールバック」である必要があります。番号?また、最初の関数名の「content_types」の部分はどうですか?
Pierre.Vriens

はい、言及した変更を行う必要があります。エラーが発生することなくこれらのパーツを複製できるため、コメントを逃しました。コメントで、関数の実行内容にコンテキストを追加することもできます。
Alex Finnarn 16

4

drupal.orgのdrushifyコマンドも参照してください。

drushifyは、指定したモジュールのスケルトンDrushコマンドファイルテンプレートを作成するシンプルなコードジェネレーターです。

取り付け

drush dl drushify

使用法

drush @site drushify modulename

グレッグに感謝します、これについては知りませんでした。ただし、このモジュールに関するドキュメントはありますか(README.txtは役に立ちません。プロジェクトページに「ドキュメントの読み取り」はありません)。そのような生成されたコードがどのように見えるかを示すリンクを知っていますか?
Pierre.Vriens 2016

Drushifyが使用するテンプレートファイルは次のとおりです:cgit.drupalcode.org/drushify/tree/templates/commandfile.tmpl。また、READMEに従ってダウンロードして実行すると、出力が表示されます。
greg_1_anderson 2016

すでにそのテンプレートを見ましたが、これについて誰かに教えているのであれば、それは使用するのに理想的な例ではありません。それで「生成コード」について質問しました。もちろん、modueをインストールすることはかなり前向き(標準)ですが、「READMEごと」(cgit.drupalcode.org/drushify/tree/README.txtで想定)は明確ではありません(1行のコンテンツ)。これについては、後でさらに宿題をやります。
Pierre.Vriens 2016

3

...あなたの質問が本当にアライスを作成する必要があるように聞こえるようにすることでこれの前置きをしますが、新しい名前で独自の新しいコマンドを作成する方法を明示的に要求しているので、次のことができます:

hook_drush_command関数の配列キーとコールバック関数の名前を変更する必要があります。drush_fooというファイルを作成して、必要なコマンドを定義できます。hook_drush_command関数からの配列キーは、コールバック関数名と同じであることに注意してください(ハイフンが下線に置き換えられている点を除きます)。次のようなものを試してください:

<?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)
}

また、drushコマンドを追加(または変更)するときは常に実行しdrush cc drushて、drushが独自のキャッシュをクリアして新しいコマンドがあることを確認できることを忘れないでください。


「content-type-list」のエイリアスを作成し、すでに「content-type-list」(まったく別のことをしている)を持っていると想定すると、エイリアスを作成してもそれはまったく同じだと思います」完全に異なる」(「mijn-contenttypes-lijst」コマンドで実行したいものの代わりに)。または、まだ何か不足していますか?また、私のモジュールの名前がhook_drush_commandを実装する "foo"である場合、なぜ最初の関数の名前がfoo_drush_commandではないのですか?drushでは、最初の関数名の先頭に「drush_」が必要ですか?
Pierre.Vriens

別のことをするコマンドが必要な場合はエイリアスを使用すべきではないというあなたの正解...しかし、あなたの質問は少しあいまいでした。@adrianのように見えますが、私は基本的には同じ答えを出したので、
大丈夫です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.