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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top