¿Cómo mostrar el recuento de comentarios de nodo en node.tpl?

15

Tuve la brillante idea de cambiar mis permisos de usuario para que los invitados no puedan ver los comentarios en un nodo. No tengo problemas con las Vistas en mi sitio, ya que pueden ver claramente que hay comentarios en los nodos, y estarán más inclinados a registrarse. El problema parece ser cuando llegan a mi sitio directamente a un nodo, no ven ningún comentario y piensan "eso es un poco basura; vámonos".

¿Hay alguna manera de mostrar la cantidad de comentarios debajo de un nodo?

Reg Gordon
fuente

Respuestas:

10

Le recomiendo que use template_preprocess_node () .
Este es un ejemplo básico para D8

function YOUR_THEME_preprocess_node(&$variables) {
  $variables['comment_count'] = $variables['node']->get('YOUR_COMMENT_FIELD')->comment_count;
}

Y luego puede usarlo en su node.html.twigarchivo de la siguiente manera:

{{ comment_count }}

A continuación se muestra un ejemplo básico en D6, puede personalizarlo a su gusto. En su archivo template.php ubicado en su directorio de temas, agregue algo similar a (reemplazando YOURTHEME con el nombre de su tema):

function YOURTHEME_preprocess_node(&$variables) {
  $nid = $variables['node']->nid;
  $variables['num_comments'] = db_result(db_query('SELECT COUNT(cid) AS count FROM {comments} WHERE nid = %d', $nid)) . ' comment(s) on this node';
}

y guarda el archivo. Ahora en node.tpl.php (o cualquier plantilla equivalente, node-mycontenttype.tpl.php, etc.) simplemente agregue:

<?php print $num_comments; ?>

Donde quiera que se ubique el recuento de comentarios y guárdelo. Borre el caché y luego vea sus cambios.

Laxman13
fuente
Intenté adaptar su código para template_preprocess_node a drupal 7 pero recibo este error Aviso: Variable indefinida: num_comments en include () (línea 116
Alexander
¿Qué has cambiado mientras te adaptabas? ¿Su consulta de base de datos se parece a la que da @doterobcn a continuación?
Laxman13
12

Puede usar $comment_counten node.tpl.php .

$type: Tipo de nodo, es decir, historia, página, blog, etc
$comment_count.: Número de comentarios adjuntos al nodo.

graceman9
fuente
Supongo que eso $comment_countcuenta el número de comentarios visibles para el usuario; Si el usuario actual no puede ver los comentarios, esa variable se establecerá en cero.
kiamlaluno
1
Si. Y más directamente$node->comment_count
artfulrobot
4

Actualización, para Drupal 7 su consulta en template.php debería verse así:

$vars['num_comments'] = db_query("SELECT COUNT(cid) AS count FROM {comment} WHERE nid =:nid",array(":nid"=>$vars['nid']))->fetchField();
doterobcn
fuente
0

Para Drupal 8:

function YOURTHEME_preprocess_node(&$variables) {
  $nid = $variables['node']->nid->value;
  $num_comment = db_query('SELECT comment_count FROM {comment_entity_statistics} WHERE entity_id = ' . $nid)->fetchAssoc();
  $variables['comment_count'] = $num_comment['comment_count'];
}

Ahora en page.html.twig:

{{ comment_count }}

Borre el caché y luego vea sus cambios.

rpayanm
fuente
Es realmente una mala práctica consultar el db de esa manera por algo que puede ser mucho más simple usando la API de Drupal: $ variables ['node'] -> get ('comment') -> comment_count;
ipwa
@ipwa si se conoce el nombre de campo de comentarios, de lo contrario, no es una solución
golddragon007
0

En Drupal 8, use esto directamente en su plantilla de nodo:

{{ node.comment.comment_count }}

Tenga en cuenta que para que funcione, debe tener el campo de comentarios predeterminado en su nodo, que siempre se denomina comentario.

ipwa
fuente