2010-01-14 2 views
0

ici avec une question désagréable.Modification du balisage des commentaires de filetage dans Drupal 6

Drupal gérer des commentaires donnant à l'utilisateur le choix d'afficher thems juste de 4 façons: Flat list - collapsed, Flat list - expanded, Threaded list - collapsed et Threaded list - expanded.

Im en utilisant la dernière, qui fournit un balisage comme:

<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> 

Mais je voudrais avoir le commentaire « enfants » à l'intérieur du même élément dom du commentaire « parent ». Ainsi, par exemple, quelque chose comme:

<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> 

afin d'avoir une marge qui me permettent de montrer les commentaires filetés en this blog (en utilisant wordpress) fait.

Il utilise un balisage comme:

<ul> 
    <li> 
     <div class="comment> 
      <!-- comment's content --> 
     </div> 
     <ul class="children"> 
      <li> 
       <div class="comment> 
        <!-- comment's content --> 
       </div> 
      </li> 
     </ul> 
    </li> 
</ul> 

Alors, quel est le drupalish façon de le faire (mieux si tous les changements que j'ai besoin sont dans les fichiers template.php ou matriçage)?

Répondre

1

comment_render() semble faire tout en interne. Donc vous devrez réécrire cela. Malheureusement, si vous utilisez node_show() pour rendre vos noeuds comment_render sera exécuté automatiquement (pas via une fonction de thème remplaçable), vous devrez donc faire beaucoup de travail pour obtenir ce que vous voulez.

Tout d'abord, vous devrez utiliser hook_nodeapi pour convaincre noyau drupal qu'il n'y a pas de commentaire (le talk module ce que cela)

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; 
    } 
} 

Ensuite, vous aurez besoin d'écrire votre propre implémentation de comment_render (avec imbrication) et appeler après le rendu du noeud (probablement sur votre page de modèle ou dans une fonction de prétraitement).

+0

+1 C'est beaucoup de travail, mais c'est certainement le moyen de le faire. – googletorp