Изменение разметки комментариев к потокам в Drupal 6
Я здесь с неприятным вопросом.
Drupal обрабатывает комментарии, предоставляя пользователю возможность отображать их только 4 способами: Flat list - collapsed
, Flat list - expanded
, Threaded 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>
Итак, каков друпальский способ сделать это (лучше, если все необходимые мне изменения находятся в файле template.php или в шаблонах)?
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 (с вложением) и вызвать ее после визуализации узла (возможно, на странице шаблона или в функции предварительной обработки).