Как показать количество комментариев к узлу в node.tpl?

15

У меня была яркая идея изменить свои права пользователя, чтобы гости не могли видеть комментарии на узле. У меня нет проблем с представлениями вокруг моего сайта, поскольку они могут четко видеть, что есть комментарии к узлам, и они будут более склонны регистрироваться. Кажется, проблема в том, что когда они попадают на мой сайт непосредственно к узлу, они не видят никаких комментариев и думают: «Это немного дерьмо, поехали».

Есть ли способ показать количество комментариев ниже узла?

Рег Гордон
источник

Ответы:

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; ?>

Где бы вы ни хотели разместить и сохранить счетчик комментариев. Очистите кеш, а затем просмотрите ваши изменения.

Laxman13
источник
Я пытался адаптировать ваш код для template_preprocess_node к drupal 7, но я получаю эту ошибку Примечание: неопределенная переменная: num_comments в include () (строка 116
Александр
Что вы изменили во время адаптации? Ваш запрос к базе данных похож на тот, который задан @doterobcn ниже?
Laxman13
12

Вы можете использовать $comment_countв node.tpl.php .

$typeТип узла, т. Е. История, страница, блог и т
$comment_count. Д. Количество комментариев, прикрепленных к узлу.

graceman9
источник
Я предполагаю, что $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();
doterobcn
источник
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 }}

Очистите кеш, а затем просмотрите ваши изменения.

rpayanm
источник
Это очень плохо, практично, если вы запрашиваете у db подобное что-то, что можно сделать намного проще, используя Drupal API: $ variable ['node'] -> get ('comment') -> comment_count;
ipwa
@ipwa, если вы знаете имя поля комментария, иначе это не решение проблемы
golddragon007
0

В Drupal 8 используйте это прямо в шаблоне вашего узла:

{{ node.comment.comment_count }}

Обратите внимание, что для его работы в вашем узле должно быть поле комментария по умолчанию, которое всегда называется комментарием.

ipwa
источник