0

私はここで厄介な質問をします。

Drupal は、 、 、 、 の 4 つの方法でコメントを表示する選択肢をユーザーにFlat list - collapsed提供Flat list - expandedThreaded list - collapsedますThreaded list - expanded

次のようなマークアップを提供する最後のものを使用しています。

<div class="comment">
    <!-- comment's content -->
</div>
<div class="indented">
    <!-- next comment is an 'answer' to the previous comment! -->
    <div class="comment">
        <!-- comment's content -->
    </div>
</div>

しかし、「親」コメントの同じdom要素内に「子」コメントを入れたいと思います。たとえば、次のようなものです。

<div class="comment">
    <!-- comment's content -->
    <div class="indented">
        <!-- next comment is an 'answer' to the previous comment! -->
        <div class="comment">
            <!-- comment's content -->
        </div>
    </div>
</div>

このブログ(wordpress を使用)のように、スレッド化されたコメントを表示できるマークアップを作成するためです。

次のようなマークアップを使用します。

<ul>
    <li>
        <div class="comment>
            <!-- comment's content -->
        </div>
        <ul class="children">
            <li>
                <div class="comment>
                    <!-- comment's content -->
                </div>
            </li>
        </ul>
    </li>
</ul>

では、それを行うためのdrupalishの方法は何ですか(必要なすべての変更が template.php またはテンプレート ファイルにある場合)。

4

1 に答える 1

1

comment_render()は内部ですべてを行うようです。したがって、これを書き直す必要があります。残念ながら、node_show()を使用してノードをレンダリングしている場合、comment_render は (オーバーライド可能なテーマ関数を介してではなく) 自動的に実行されるため、これを希望どおりに実行するにはかなりの作業を行う必要があります。

最初に、hook_nodeapiを使用して、drupal コアにコメントがないことを納得させる必要があります ( talk モジュールがこれを行います) 。

function talk_nodeapi(&$node, $op) {
  switch ($op) {
    case 'load':
      if (talk_activated($node->type) && arg(0) == 'node' && !arg(2)) {
        // Overwrite setting of comment module and set comments for this node to disabled.
        // This prevents the comments of being displayed.
        $output['comment_original_value'] = $node->comment;
        $output['comment'] = 0;
        return $output;
      }
      break;
  }
}

次に、comment_render の独自の実装を (ネストを使用して) 記述し、ノードがレンダリングされた後にそれを呼び出す必要があります (おそらく、テンプレート ページまたは前処理関数で)。

于 2010-01-14T14:57:29.227 に答える