開発者ドキュメント

VPSで独自のダッシュコマンドを宣言する方法

ダッシュについて

Drushは、Drupalサイトを管理するための優れたコマンドラインインターフェイスです。 それはあなたが非常に速いスピードであなたのサイトでいくつかの管理タスクを実行することができる多くの簡単なコマンドを提供します。 Drushで何ができるかよくわからない場合は、このDrushの使用に関する初心者向けガイドを確認してください。

Drushの優れている点は、開発者にとって非常に使いやすいことです。 これは、既存のコマンドとは別に、必要なタスクを実行するカスタムコマンドを宣言できることを意味します。 したがって、この記事では、独自のDrushコマンドを宣言するための簡単で要点のあるチュートリアルを取得します。 これを行う方法を説明するために、ユーザーがコマンド引数として渡す特定のコンテンツタイプのすべてのノードを公開するコマンドを宣言します。

入門

このチュートリアルを実行するには、VPSにDrushが設定されている必要があります。 できれば、Drupalをインストールして作業する必要があり、いくつかの単純なDrupalコードを恐れてはなりません。 VPSでDrushをセットアップし、それを使用してDrupalサイトをすばやくデプロイする方法については、このチュートリアルをお読みください。

独自のDrushコマンドを作成するには、次の3つの主要な手順が必要です。

  1. コマンド宣言とそのコールバックコードを保存するファイルを作成する
  2. コマンド機能の宣言
  3. コマンドコールバック関数(アクションを実行するためにDrushコマンドによって呼び出されるphp関数)を宣言します

ステップ1:コマンドファイルを作成する

このステップで最も重要なことは、コマンドファイルに正しい名前を付けて、Drushが検索するフォルダーに配置することです。 その名前は.drush.incで終わる必要があり(この場合は publish.drush.inc になります)、サイトのカスタムモジュールのフォルダーに配置する必要があります(モジュールが有効になっている場合はそのサイトで機能します)またはサーバーのルートディレクトリの.drushフォルダーにあります。

また、ファイルの先頭に開始phpタグを追加することを忘れないでください。

ステップ2:コマンド関数を宣言する

新しいDrushコマンドを宣言するには、phpオープニングタグの上下に作成したファイルで hook_drush_command()を呼び出す必要があります。 この例では、次のようになります。

function publish_drush_command() {
  $items = array();
  $items['publish-content'] = array(
    'description' => 'Publish content',
    'aliases' => array('pc'),
    'arguments' => array(
      'type' => 'Nodes of this type will be published',
    ),
  );
  return $items;
}

注:このコマンドは、VPSのルートフォルダーにある.drushフォルダーに配置されたファイルで宣言されています。

この関数を使用して、 publish-content $ items 配列の新しいキー)と呼ばれる、いくつかの特性を持つ新しいコマンドを宣言しています。 説明とargumentsキーに含まれるものは、 drushhelppublish-contentコマンドを実行したときに表示されるものです。 ここで実際に役立つのは、長い publish-content バージョンの代わりに実行できるエイリアス(またはショートカット)を指定できることです。 この場合、 drushpublish-contentdrushpcと等しくなります。

ここに追加できるものは他にもありますが、これらはあなたが始めることができる基本のいくつかです。 このコマンドで呼び出すオプションのコールバック関数を指定できますが、省略した場合(先ほどのように)、 drush_invoke()はコールバックの関数名を自動的に生成することに注意してください。

ステップ3:コマンドコールバック関数を宣言する

Drupalとのやり取りが始まります。 この関数では、カスタムコマンドを実行するときにDrupalで実行するコードを記述する必要があります。 関数の名前は、drush_command_nameの形式である必要があります。 したがって、この場合、次のようになります(コマンド名のダッシュが関数名のアンダースコアになることに注意してください)。

function drush_publish_content($type) {
  $nodes = node_load_multiple(array(), array('type' => $type));
  $count = 0;
  foreach ($nodes as $node) {
    if($node->status == 0) {
      $count++;
      $node->status = 1;
      node_save($node);
    }  
  }
  if($count > 0) {
    drush_print($count . " nodes of the " . $type . " content type have been successfully published.");
  }

  else {
    drush_print("No nodes of the " . $type . " content type were published.");
  }
}

このコールバック関数は、公開するすべてのノードのコンテンツタイプのマシン名を引数として取ります。 これは、次のようにコマンド引数として渡されます。

drush publish-content article

このコマンドは、現在公開されていない記事コンテンツタイプのすべてのノードを公開します。 これは、 node_load_multiple()関数を使用してそのタイプのすべてのノードをロードし、0から1のノードのステータス属性を変更することによって行われます。 次に、Drushは、公開されたノードの数を出力します(コマンドによって実際に影響を受けたノードの数のみを表示します)。

さらに、検証フックを宣言して、コマンドに問題がある場合にエラーをチェックして表示することもできます。 これは、コマンドが実際にDrushによって実行される前に呼び出されます。 この場合、これを使用して、コマンド引数で指定されたコンテンツタイプが実際に存在するかどうかを確認できます。 そうでない場合、Drushはエラーをスローします:

function drush_publish_content_validate($type) {
  if(node_type_load($type) === FALSE) {
	return drush_set_error('NON_EXISTENT', dt('There is no content type by that name'));
  }
}

これで、サイトでいくつかのアクションを実行する基本的なDrushコマンドを登録できます。 この作業を簡単に複製して、同じ方法でコンテンツを非公開にする逆非公開コマンドを作成することもできます。空が限界です。

投稿者: Danny
モバイルバージョンを終了