如何在node.tpl中显示节点评论计数?


15

我曾经想过要更改用户权限,因此来宾无法在节点上看到评论。我对我的站点周围的视图没有任何问题,因为它们可以清楚地看到有关节点的评论,并且他们将更倾向于注册。问题似乎出在当他们直接到达我的站点并到达某个节点时,他们没有看到任何评论,并认为“这有点废话,我们走吧”。

有什么办法可以显示节点下面的评论数量?

Answers:


10

我建议您使用template_preprocess_node()
这是D8的基本示例

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

然后可以在node.html.twig文件中使用它,如下所示:

{{ comment_count }}

下面是D6中的一个基本示例,您可以根据自己的喜好对其进行自定义。在主题目录中的template.php文件中,添加以下内容(将YOURTHEME替换为主题名称):

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

并保存文件。现在在node.tpl.php(或任何等效模板,node-mycontenttype.tpl.php等)中,只需添加:

<?php print $num_comments; ?>

无论您希望在何处放置和保存评论计数。 清除缓存,然后查看您的更改。


我试图将您的template_preprocess_node代码修改为drupal 7,但出现此错误通知:未定义变量:include()中的num_comments(第116行
Alexander

适应时您做了哪些更改?您的数据库查询看起来像下面@doterobcn给出的查询吗?
Laxman13 2012年

12

您可以$comment_countnode.tpl.php中使用。

$type:节点类型,即故事,页面,博客等。
$comment_count:附加到节点的评论数。


我想这$comment_count是对用户可见的评论进行计数的方法。如果当前用户看不到评论,则该变量将设置为零。
kiamlaluno

1
是。更直接的是$node->comment_count
artfulrobot

4

更新,对于Drupal 7,您对template.php的查询应类似于:

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

0

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

现在在page.html.twig中:

{{ comment_count }}

清除缓存,然后查看您的更改。


像这样查询数据库是非常糟糕的,因为使用Drupal API可以简化很多事情:$ variables ['node']-> get('comment')-> comment_count;
ipwa

@ipwa,如果您知道注释字段名称,则不是解决方案
golddragon007

0

在Drupal 8中,可以直接在节点模板中使用它:

{{ node.comment.comment_count }}

请注意,要使其正常工作,您需要在节点中始终使用默认注释字段,该字段始终命名为comment。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.