Alterando a marcação de comentários de encadeamento no Drupal 6
Pergunta
Estou aqui com uma pergunta desagradável.
Drupal Handle Comentários, dando ao usuário a opção de exibi -los apenas de quatro maneiras: Flat list - collapsed
, Flat list - expanded
, Threaded list - collapsed
, e Threaded list - expanded
.
Estou usando o último, que fornece uma marcação como:
<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>
Mas eu gostaria de ter o comentário dos 'filhos' dentro do mesmo elemento DOM do comentário 'pai'. Então, por exemplo, algo como:
<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>
Para ter uma marcação que me permita mostrar os comentários encadeados como este blog (usando o WordPress) faz.
Ele usa uma marcação como:
<ul>
<li>
<div class="comment>
<!-- comment's content -->
</div>
<ul class="children">
<li>
<div class="comment>
<!-- comment's content -->
</div>
</li>
</ul>
</li>
</ul>
Então, qual é o drupalish Maneira de fazer isso (melhor se todas as alterações necessárias estão no modelo.php ou arquivos de modelos)?
Solução
comentário_render () parece fazer tudo internamente. Então você precisaria reescrever isso. Infelizmente se você estiver usando node_show () Para renderizar seus nós, comentar_render será executado automaticamente (não através de uma função de tema superestável), então você precisará fazer muito trabalho para fazer isso fazer o que quiser.
Em primeiro lugar, você terá que usar Hook_nodeapi para convencer o núcleo do Drupal de que não há comentários (o módulo de conversa isso faz isso)
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;
}
}
Em seguida, você precisará escrever sua própria implementação de comentário_render (com ninho) e chamará isso após a renderização do nó (provavelmente na página do seu modelo ou em uma função de pré -processamento).