web-dev-qa-db-ja.com

コメントオブジェクトを呼び出す関数や方法はありますか?

Page.tpl.phpの$commentオブジェクトを使用したいと思います。機能や使い方はありますか?

1
enjoylife

page.tpl.php テンプレートファイルは、Drupalからのページ出力に使用されます。ページがノードに出力されているとは言われていません。 node.tpl.php を使用することをお勧めします。これは、別のテンプレートが提案されていて、そのファイルが存在する場合を除いて、常にノードに使用されます。

私が報告しているコードはpage.tpl.phpに有効ですが、いくつかの変更を加えるだけで、node.tpl.phpにも使用できます。
表示されているノードのコメントに関心があると想定しています。

if (!empty($node)) {
  $result = db_query('SELECT * FROM {comments} WHERE nid = %d', $node->nid);
  while ($comment_obj = db_fetch_object($result)) {
    // $comment_obj contains the comment object.
    // ...
  }
}

Node.tpl.phpでコードが使用されている場合、テンプレートは確実にノードを視覚化するために使用されるため、$nodeが空でないかどうかを確認する必要はありません。
node.tpl.phpにはすでに$comment_objという名前の変数がありますが、その変数にはコメントオブジェクトが含まれていないため、変数$commentを呼び出しました。ノードのコメント設定が含まれています。

Jeremy Frenchから指摘されているように、このようなコードは、プレゼンテーションコード(つまり、変数の内容を出力するコード)のみを含むテンプレートファイル内に配置しないでください。そのコードは、テンプレートファイルから表示される出力を構築する関数(テーマのtemplate.phpに含まれる)の本体である可能性があります。または、前処理関数で同様のコードを使用する必要があります。

この場合、コードは次のようになります。

function mymodule_preprocess_node(&$variables) {
  $variables['comment_output'] = '';

  if (!empty($variables[node])) {
    $result = db_query('SELECT * FROM {comments} WHERE nid = %d', $variables[node]->nid);
    while ($comment_obj = db_fetch_object($result)) {
      // $comment_obj contains the comment object.
      // ...
      $variables['comment_output'] .= // ...
    }
  }
}

page.tpl.phpは、$variables['comment_output']のコンテンツを出力する必要があります。

print $comment_output;

Drupalは comment.tpl.php を使用し、コメントオブジェクトが渡されることにも注意してください。何をしようとしているかによっては、それがテンプレートになる可能性があります。あなたが本当に興味を持っているファイル。

2
kiamlaluno