web-dev-qa-db-ja.com

Drushまたはコマンドラインを使用してノードにコメントを追加する

drupal 7.を使用してサーバードキュメントシステムをセットアップしようとしています。7。サーバーごとに独自のページ/ノードがあります。システムに行われた更新または変更は、サーバーページのコメントとして表示されます。私がやろうとしているのは、drushやその他のコマンドラインツールを使用してコメントを追加できるようにすることです。これにより、各サーバーにエイリアスを作成して、そのサーバーページにコメントを追加できます。プログラマーではないので、任意の助けいただければ幸いです。

3
user53893

Shawn Conn's answer を展開すると、以下はDrupal 7ノードにコメントを追加するDrushコマンドです。

使用法:

drush add-comment --uid=1 --subject='A comment' 'This is my awesome comment.'

以下のスクリプトをadd_comment.drush.incとして保存し、$HOME/.drushディレクトリに配置します。

<?php

/**
 * Implements hook_drush_command().
 */
function add_comment_drush_command() {
  $items = array();

  $items['add-comment'] = array(
    'description' => "Add a comment to a node.",
    // Describe the arguments for this command.  Delete
    // this seciton if command takes no arguments.
    'arguments' => array(
      'comment' => 'The comment to add.',
    ),
    // List all options used for this command. Only options that
    // are listed here (or that are global Drush options) may
    // be specified on the commnadline; all others raise an error.
    'options' => array(
      'nid' => array(
        'description' => 'The node id to add the comment to.',
        'example-value' => '3',
      ),
      'subject' => 'The comment subject. Defaults to empty.',
      'uid' => 'The user id of the user to post the comment as. Defaults to anonymous.',
    ),
    // Give one or more example commandline usages for this command
    'examples' => array(
      'drush add-comment --nid=123 "This is my great comment."' => 'Do something.',
    ),
    'aliases' => array('addc'),
  );

  return $items;
}

/**
 * Implements hook_drush_help().
 *
 * @param
 *   A string with the help section (prepend with 'drush:')
 *
 * @return
 *   A string with the help text for your command.
 */
function add_comment_drush_help($section) {
  switch ($section) {
    case 'drush:add-comment':
      return dt("Brief help for Drush command add-comment.");
    // The 'title' meta item is used to name a group of
    // commands in `drush help`.  If a title is not defined,
    // the default is "All commands in ___", with the
    // specific name of the commandfile (e.g. add-comment).
    // Command files with less than four commands will
    // be placed in the "Other commands" section, _unless_
    // they define a title.  It is therefore preferable
    // to not define a title unless the file defines a lot
    // of commands.
    case 'meta:add-comment:title':
      return dt("add-comment commands");
    // The 'summary' meta item is displayed in `drush help --filter`,
    // and is used to give a general idea what the commands in this
    // command file do, and what they have in common.
    case 'meta:add-comment:summary':
      return dt("Summary of all commands in this command group.");
  }
}

/**
 * Implementation of drush_hook_COMMAND().
 *
 * Add a comment to a node.
 */
function drush_add_comment($comment) {
  $nid = drush_get_option('nid');
  $uid = drush_get_option('uid', 0);
  $subject = drush_get_option('subject', '');

  $comment = (object) array(
    'nid' => $nid,
    'cid' => 0,
    'pid' => 0,
    'uid' => $uid,
    'mail' => '',
    'is_anonymous' => ($uid == 0),
    'homepage' => '',
    'status' => COMMENT_PUBLISHED,
    'subject' => $subject,
    'language' => LANGUAGE_NONE,
    'comment_body' => array(
      LANGUAGE_NONE => array(
        0 => array (
          'value' => $comment,
          'format' => 'filtered_html'
        )
      )
    ),
  );

  comment_submit($comment);
  comment_save($comment);
}
3
greg_1_anderson

ここで知っておくべきことが2つあります。Drushスクリプトを作成する方法と、プログラムでDrupalコメントを追加する方法です。

  • Drushスクリプト は、Drushを介してDrupal環境を起動するシェルスクリプトのようなものです。本質的に、これはPHPコードスクリプトが前#!/usr/bin/envタグの代わりに#!/full/path/to/drush drushまたは<?phpを使用します。
  • Drupalでは、プログラムでコメントを作成するのは非常に簡単です。 StackOverflowの回答 があり、それを行う方法のスニペットを提供しています。

これで、指定したタイトル/本文を持つノードIDにコメントするためにいくつかの引数を取ることができる実行可能スクリプト(例:chmod +x add_comment.drush)を作成できます。

  #!/usr/bin/env drush

  //Check for valid args
  $args = drush_get_arguments();
  if(isset($args[2]) && isset($args[3]) && isset($args[4])) {
    $nid = $args[2];
    $title = $args[3];
    $body = $args[4];

    //@TODO: Any further checks

    //Create comment object and save it
    $comment = (object) array(
      'nid' => $nid,
      'cid' => 0,
      'pid' => 0,
      'uid' => 1,
      'mail' => '',
      'is_anonymous' => 0,
      'homepage' => '',
      'status' => COMMENT_PUBLISHED,
      'subject' => $title,
      'language' => LANGUAGE_NONE,
      'comment_body' => array(
        LANGUAGE_NONE => array(
          0 => array (
            'value' => $body,
            'format' => 'filtered_html'
          )
        )
      ),
    );
    comment_submit($comment);
    comment_save($comment);
  }

上記の例では、add_comment.drushという名前のスクリプトを./add_comment.drush 100 "TITLE" "COMMENT"コマンドで実行して、ノードID#100にコメントを追加できます。ヘッダーとして"TITLE"、コメント本文として"COMMENT"

2
Shawn Conn