Comment afficher le nombre de commentaires de nœuds dans node.tpl?

15

J'ai eu la brillante idée de modifier mes autorisations utilisateur afin que les invités ne puissent pas voir les commentaires sur un nœud. Je n'ai aucun problème avec les vues autour de mon site, car ils peuvent clairement voir qu'il y a des commentaires sur les nœuds, et ils seront plus enclins à s'inscrire. Le problème semble être lorsqu'ils arrivent sur mon site directement sur un nœud, ils ne voient aucun commentaire et pensent "c'est un peu merdique, allons-y".

Existe-t-il un moyen de montrer le nombre de commentaires sous un nœud?

Reg Gordon
la source

Réponses:

10

Je vous recommande d'utiliser template_preprocess_node () .
Ceci est un exemple de base pour D8

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

Et puis vous pouvez l'utiliser dans votre node.html.twigfichier comme ceci:

{{ comment_count }}

Un exemple de base en D6 est ci-dessous, vous pouvez le personnaliser à votre guise. Dans votre fichier template.php situé dans votre répertoire de thème, ajoutez quelque chose dans le sens de (en remplaçant YOURTHEME par le nom de votre thème):

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

et enregistrez le fichier. Maintenant, dans node.tpl.php (ou tout modèle équivalent, node-mycontenttype.tpl.php, etc.), ajoutez simplement:

<?php print $num_comments; ?>

Partout où vous souhaitez que le nombre de commentaires soit localisé et enregistré. Videz le cache , puis affichez vos modifications.

Laxman13
la source
J'ai essayé d'adapter votre code pour le template_preprocess_node à drupal 7 mais j'obtiens cette erreur Remarque: Variable indéfinie: num_comments dans include () (ligne 116
Alexander
Qu'avez-vous changé lors de l'adaptation? Votre requête de base de données ressemble-t-elle à celle donnée par @doterobcn ci-dessous?
Laxman13
12

Vous pouvez utiliser $comment_countdans node.tpl.php .

$type: Type de nœud, c'est-à-dire histoire, page, blog, etc
$comment_count.: Nombre de commentaires attachés au nœud.

graceman9
la source
Je suppose que $comment_countcompte le nombre de commentaires visibles par l'utilisateur; si l'utilisateur actuel ne peut pas voir les commentaires, cette variable sera mise à zéro.
kiamlaluno
1
Oui. Et plus directement$node->comment_count
artfulrobot
4

Mise à jour, pour Drupal 7 votre requête sur template.php devrait ressembler à:

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

Pour 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'];
}

Maintenant dans page.html.twig:

{{ comment_count }}

Videz le cache, puis affichez vos modifications.

rpayanm
la source
Il est vraiment mauvais de demander à la base de données comme ça quelque chose qui peut être beaucoup plus simple en utilisant l'API Drupal: $ variables ['node'] -> get ('comment') -> comment_count;
ipwa
@ipwa si vous connaissez le nom du champ de commentaire, sinon ce n'est pas une solution
golddragon007
0

Dans Drupal 8, utilisez-le directement dans votre modèle de nœud:

{{ node.comment.comment_count }}

Notez que pour que cela fonctionne, vous devez avoir le champ de commentaire par défaut dans votre nœud qui est toujours nommé commentaire.

ipwa
la source