Como ocultar comentários abaixo do nó, mas não fechá-los?

8

Atualmente, eu quero listar comentários para nós (por Views, por exemplo), portanto, preciso ocultar a lista de comentários padrão do módulo de comentários principal. Eu posso fazer assim:

  unset($node['comments']['comments']);

Mas isso não impedirá a consulta do banco de dados para comentários.
Então, eu encontrei algumas maneiras loucas de enganar o módulo de comentários. Por exemplo, para definir uma $node->previewpropriedade falsa ou para criar um novo modo de exibição e substituir o node/%noderetorno de chamada padrão .

É realmente tão difícil ocultar comentários abaixo do nó, mas ainda assim posso adicionar um novo comentário ou perdi alguma coisa?

Atualização sobre a opção "Oculto"

E o valor "Oculto" para o tipo de conteúdo:
preciso de um comportamento de fechamento / abertura para meus comentários. Mas se eu definir "Oculto" para o meu tipo de conteúdo, minhas novas partes de conteúdo serão definidas como "Comentários fechados" em vez de ocultos ( eis o código ). Outro problema é que o usuário com permissão para "postar comentários" não pode adicionar um comentário, se os comentários estiverem ocultos ( aqui está o código ).
Então, eu não consigo entender.

Responda

Solução encontrada com hook_module_implements_alter(). Muito obrigado!

kalabro
fonte
é fácil ... editar o tipo de conteúdo, nas configurações de comentários, selecione "Oculto". isso ocultará seus comentários
subhojit777 16/04
@ subhojit777 OP quer impedir consulta de banco de dados, eu acho.
Niksmac 16/04/12

Respostas:

9

Nos módulos / comment / comment.module, podemos ver que hook_node_view () (comment_node_view ()) está sendo executado na linha 614. É aqui que as funções estão sendo disparadas para carregar todos os comentários e anexá-los ao nó. Os 2 primeiros conjuntos de if () {...} parecem estar lidando com o formulário para adicionar comentário e o link de ação. Então o bloco final de código está finalmente adicionando os comentários, que eu acredito que é o que você mais se preocupa em esconder, e suponho que você queira que isso seja ignorado por motivos de desempenho:

// Only append comments when we are building a node on its own node detail
// page. We compare $node and $page_node to ensure that comments are not
// appended to other nodes shown on the page, for example a node_reference
// displayed in 'full' view mode within another node.
if ($node->comment && $view_mode == 'full' && node_is_page($node) && empty($node->in_preview)) {
  $node->content['comments'] = comment_node_page_additions($node);
}

Eu acho que esse código é bobo, porque o módulo de comentários não deve depender de nenhum modo de exibição codificado em particular. Espero que isso mude e se torne uma configuração na interface do usuário.

Independentemente disso, encontrei uma publicação semelhante que lhe interessa: existe uma maneira de impedir que o comment_node_view seja acionado?

Basicamente, você deseja usar hook_module_implements_alter () para impedir que o módulo de comentários seja capaz de disparar hook_node_view (). Aqui está o que você precisa adicionar ao seu módulo personalizado:

function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'node_view') {
    unset($implementations['comment']);
  }
}
Charlie Schliesser
fonte
11
Muito obrigado! Especialmente para hook_module_implements_alter!
Kalabro 16/04