Як показати кількість коментарів до вузла в 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, що знаходиться у вашому тематичному каталозі, додайте щось уздовж рядків (замінюючи ВАШУ ТЕМУ на ім’я вашої теми):

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, але я отримую цю помилку Повідомлення: Невизначена змінна: num_comments in include () (рядок 116
Олександр

Що ви змінили під час адаптації? Чи виглядає ваш запит до бази даних як той, який подано нижче @doterobcn?
Laxman13

12

Ви можете використовувати $comment_countв node.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 }}

Очистіть кеш і перегляньте зміни.


Це дуже погано практичний йо-запит на подібний db для чогось, що можна зробити набагато простіше за допомогою API Drupal: $ variables ['node'] -> get ('comment') -> comment_count;
ipwa

@ipwa, якщо ви знаєте ім'я поля коментарів, інакше це не рішення
golddragon007

0

У Drupal 8 використовуйте це безпосередньо у шаблоні вашого вузла:

{{ node.comment.comment_count }}

Зауважте, що для його роботи вам потрібно мати у вашому вузлі поле коментарів за замовчуванням, яке завжди називається коментарем.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.