Modifica della filettatura commenti markup in Drupal 6
Domanda
im qui con una domanda cattiva.
Drupal gestire i commenti che danno all'utente la possibilità di visualizzare thems solo in 4 modi:. Flat list - collapsed
, Flat list - expanded
, Threaded list - collapsed
, e Threaded list - expanded
Im utilizzando l'ultimo, il quale fornire un markup come:
<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>
ma mi piacerebbe avere il commento 'figli' all'interno dello stesso elemento DOM del commento 'genitore'. Così, per esempio, qualcosa come:
<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>
al fine di avere un markup che mi permetta di mostrare i commenti filettati come questo blog (utilizzando wordpress) fa.
E 'usare un markup come:
<ul>
<li>
<div class="comment>
<!-- comment's content -->
</div>
<ul class="children">
<li>
<div class="comment>
<!-- comment's content -->
</div>
</li>
</ul>
</li>
</ul>
Quindi, qual è il drupalish modo per farlo (meglio se tutti i cambiamenti cui ho bisogno sono nei file template.php o di templating)?
Soluzione
comment_render () sembra fare tutto internamente. Così si avrebbe bisogno di riscrivere questo. Purtroppo se si utilizza node_show () per rendere i nodi comment_render verranno eseguiti automaticamente (non tramite una funzione di tema override) quindi sarà necessario fare un sacco di lavoro per ottenere questo a fare quello che vuoi.
In primo luogo si dovrà utilizzare hook_nodeapi di convincere Drupal core che non ci sono commenti ( modulo parlare fa questo)
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;
}
}
Poi sarà necessario scrivere una propria implementazione di comment_render (con nidificazione) e chiamare che, dopo il nodo è reso (probabilmente sulla tua pagina modello o in una funzione pre-elaborazione).