¿Cómo ocultar comentarios debajo del nodo, pero no cerrarlos?


8

De hecho, quiero enumerar los comentarios para los nodos (por ejemplo, por Vistas), por lo que necesito ocultar la lista de comentarios estándar del módulo de comentarios principal. Puedo hacerlo así:

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

Pero no impedirá la consulta DB para comentarios.
Así que encontré algunas formas locas de engañar al módulo de comentarios. Por ejemplo, para establecer una $node->previewpropiedad falsa o para crear un nuevo modo de vista y sobrescribir la node/%nodedevolución de llamada estándar .

¿Es realmente tan difícil ocultar comentarios debajo del nodo pero aún así permitir agregar nuevos comentarios, o me perdí algo?

Actualización sobre la opción "Oculto"

¿Qué pasa con el valor "oculto" para el tipo de contenido
? Necesito un comportamiento cercano / abierto para mis comentarios. Pero si configuro "Oculto" para mi tipo de contenido, mis nuevas piezas de contenido se configuran como "Comentarios cerrados" en lugar de ocultas ( aquí está el código ). Otro problema es que el usuario con permiso para "publicar comentarios" no puede agregar un comentario, si los comentarios están ocultos ( aquí está el código ).
Entonces no puedo entender la idea.

Responder

Solución encontrada con hook_module_implements_alter(). ¡Muchas gracias!


es fácil ... edite el tipo de contenido, en la configuración de comentarios seleccione "Oculto". esto ocultará sus comentarios
subhojit777

@ subhojit777 OP quiere evitar consultas DB, creo.
niksmac

Respuestas:


9

En modules / comment / comment.module podemos ver que hook_node_view () (comment_node_view ()) se está ejecutando en la línea 614. Aquí es donde las funciones se activan para cargar todos los comentarios y adjuntarlos al nodo. Los primeros 2 conjuntos de if () {...} parecen estar manejando el formulario para agregar comentarios y el enlace de acción. Luego, el último bloque de código finalmente agrega los comentarios, que creo que es lo que realmente te preocupa más ocultar, y supongo que quieres omitir esto por razones de rendimiento:

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

Creo que este código es tonto, porque el módulo de comentarios no debería depender de ningún modo de vista codificado en particular. Esperemos que esto cambie y se convierta en un escenario en la interfaz de usuario.

De todos modos, he encontrado una publicación similar que podría interesarle: ¿Hay alguna manera de evitar que comment_node_view se active?

Básicamente, desea utilizar hook_module_implements_alter () para evitar que el módulo de comentarios pueda activar hook_node_view (). Esto es lo que necesita agregar a su módulo personalizado:

function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'node_view') {
    unset($implementations['comment']);
  }
}

1
¡Muchas gracias! Especialmente para hook_module_implements_alter!
kalabro

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.