更改Drupal 6中的线程注释标记

时间:2010-01-14 13:17:23

标签: php drupal drupal-6 theming

我在这里提出一个令人讨厌的问题。

Drupal处理评论,让用户可以选择以4种方式显示这些内容:Flat list - collapsedFlat list - expandedThreaded list - collapsedThreaded 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>

为了有一个标记,允许我以this blog(使用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或模板文件中,那会更好吗?)

1 个答案:

答案 0 :(得分:1)

comment_render()似乎在内部做了一切。所以你需要重写这个。不幸的是,如果你使用node_show()来渲染你的节点,那么comment_render会自动运行(不是通过一个可覆盖的主题函数),所以你需要做很多工作才能让它做你想做的事。

首先,您必须使用hook_nodeapi来说服drupal核心没有评论(talk module会这样做)

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实现(带嵌套),并在渲染节点后调用它(可能在模板页面或预处理函数中)。