Изменение разметки потоковых комментариев в 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>
Но я хотел бы, чтобы комментарий 'children' находился внутри того же элемента dom, что и комментарий 'parent'.Так, например, что-то вроде:
<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 или шаблонов)?
Решение
комментарий_рендер() кажется, все делает внутренне.Так что вам нужно было бы переписать это.К сожалению, если вы используете node_show() узел_show() для рендеринга ваших узлов comment_render будет запускаться автоматически (не через переопределяемую функцию темы), поэтому вам нужно будет проделать довольно много работы, чтобы заставить это делать то, что вы хотите.
Во-первых, вам придется использовать hook_nodeapi чтобы убедить ядро drupal в отсутствии комментариев (the модуль разговора делает ли это)
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 (с вложенностью) и вызвать ее после рендеринга узла (возможно, на вашей странице шаблона или в функции предварительной обработки).