Jak wyświetlić liczbę komentarzy do węzła w node.tpl?

15

Wpadłem na pomysł zmiany uprawnień użytkownika, aby goście nie widzieli komentarzy w węźle. Nie mam problemów z widokami w mojej witrynie, ponieważ mogą wyraźnie zobaczyć komentarze na temat węzłów i będą bardziej skłonni do rejestracji. Problemem wydaje się to, że kiedy docierają do mojej witryny bezpośrednio do węzła, nie widzą żadnego komentarza i myślą „to trochę bzdura; chodźmy”.

Czy istnieje sposób, aby pokazać liczbę komentarzy poniżej węzła?

Reg Gordon
źródło

Odpowiedzi:

10

Polecam użyć template_preprocess_node () .
To jest podstawowy przykład dla D8

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

Następnie możesz użyć go w swoim node.html.twigpliku w następujący sposób:

{{ comment_count }}

Podstawowy przykład w D6 znajduje się poniżej, możesz go dostosować do własnych upodobań. W pliku template.php znajdującym się w katalogu motywów dodaj coś wzdłuż linii (zastępując TWÓJ TEMAT nazwą motywu):

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

i zapisz plik. Teraz w node.tpl.php (lub dowolnym równoważnym szablonie, node-mycontenttype.tpl.php itp.) Po prostu dodaj:

<?php print $num_comments; ?>

Gdziekolwiek chcesz, aby liczba komentarzy została zlokalizowana i zapisana. Wyczyść pamięć podręczną, a następnie przejrzyj zmiany.

Laxman13
źródło
Próbowałem dostosować twój kod dla template_preprocess_node do drupal 7, ale pojawia się ten błąd Uwaga: Niezdefiniowana zmienna: num_comments in include () (wiersz 116
Alexander
Co zmieniłeś podczas adaptacji? Czy zapytanie do bazy danych wygląda tak, jak podane poniżej przez @doterobcn?
Laxman13,
12

Możesz użyć $comment_countw node.tpl.php .

$type: Typ węzła, tj. Historia, strona, blog itp
$comment_count.: Liczba komentarzy dołączonych do węzła.

graceman9
źródło
Przypuszczam, że $comment_countliczy się liczba komentarzy widocznych dla użytkownika; jeśli bieżący użytkownik nie widzi komentarzy, zmienna zostanie ustawiona na zero.
kiamlaluno
1
Tak. I bardziej bezpośrednio$node->comment_count
artfulrobot
4

Zaktualizuj, dla Drupal 7 twoje zapytanie na template.php powinno wyglądać następująco:

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

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

Teraz w page.html.twig:

{{ comment_count }}

Wyczyść pamięć podręczną, a następnie przejrzyj zmiany.

rpayanm
źródło
Naprawdę źle jest ćwiczyć w ten sposób db db o coś, co można zrobić znacznie prościej przy użyciu API Drupal: $ zmienne ['node'] -> get ('comment') -> comment_count;
ipwa
@ipwa, jeśli znasz nazwę pola komentarza, w przeciwnym razie nie jest to rozwiązanie
golddragon007 10.0919
0

W Drupal 8 użyj tego bezpośrednio w szablonie węzła:

{{ node.comment.comment_count }}

Zauważ, że aby to działało, musisz mieć domyślne pole komentarza w węźle, które zawsze nazywa się komentarzem.

ipwa
źródło