Làm thế nào để hiển thị số lượng bình luận nút trong node.tpl?


15

Tôi đã có ý tưởng sáng sủa về việc thay đổi quyền của người dùng để khách có thể thấy các nhận xét về một nút. Tôi không có vấn đề gì với Lượt xem trên trang web của mình, vì họ có thể thấy rõ có ý kiến ​​về các nút và họ sẽ có xu hướng đăng ký nhiều hơn. Vấn đề dường như là khi họ đến trực tiếp trang web của tôi đến một nút, họ không thấy bất kỳ bình luận nào và nghĩ rằng "đó là một chút tào lao; hãy đi."

Có cách nào tôi có thể hiển thị số lượng bình luận bên dưới một nút không?

Câu trả lời:


10

Tôi khuyên bạn nên sử dụng template_pre process_node () .
Đây là một ví dụ cơ bản cho D8

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

Và sau đó bạn có thể sử dụng nó trong node.html.twigtập tin của mình như vậy:

{{ comment_count }}

Một ví dụ cơ bản trong D6 là bên dưới, bạn có thể tùy chỉnh nó theo ý thích của mình. Trong tệp template.php của bạn nằm trong thư mục chủ đề của bạn, hãy thêm một cái gì đó dọc theo dòng (thay thế YOUTHEME bằng tên của chủ đề của bạn):

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

và lưu tập tin. Bây giờ trong node.tpl.php (hoặc bất kỳ mẫu tương đương nào, node-mycontenttype.tpl.php, v.v.) chỉ cần thêm:

<?php print $num_comments; ?>

Bất cứ nơi nào bạn muốn số lượng bình luận được đặt và lưu. Xóa bộ nhớ cache và sau đó xem các thay đổi của bạn.


Tôi đã cố gắng điều chỉnh mã của bạn cho template_pre process_node thành drupal 7 nhưng tôi gặp lỗi này Lưu ý: Biến không xác định: num_comments in gồm () (dòng 116
Alexander

Bạn đã thay đổi điều gì trong khi thích nghi? Có phải truy vấn cơ sở dữ liệu của bạn trông giống như truy vấn được đưa ra bởi @doterobcn bên dưới không?
Laxman13

12

Bạn có thể sử dụng $comment_counttrong node.tpl.php .

$type: Kiểu nút, tức là câu chuyện, trang, blog, v.v .
$comment_count: Số lượng bình luận được đính kèm vào nút.


Tôi cho rằng $comment_countđếm số lượng bình luận hiển thị cho người dùng; nếu người dùng hiện tại không thể thấy bình luận, biến đó sẽ được đặt thành không.
kiamlaluno

1
Đúng. Và trực tiếp hơn$node->comment_count
artfulrobot

4

Cập nhật, đối với Drupal 7 truy vấn của bạn trên template.php sẽ giống như:

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

0

Đối với 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'];
}

Bây giờ trong page.html.twig:

{{ comment_count }}

Xóa bộ nhớ cache và sau đó xem các thay đổi của bạn.


Thực sự rất tệ khi bạn truy vấn db như thế đối với một thứ có thể đơn giản hơn rất nhiều khi sử dụng API Drupal: $ biến ['nút'] -> get ('bình luận') -> comment_count;
ipwa

@ipwa nếu bạn biết tên trường nhận xét, nếu không thì đó không phải là giải pháp
golddragon007

0

Trong Drupal 8 sử dụng điều này trực tiếp trong mẫu nút của bạn:

{{ node.comment.comment_count }}

Lưu ý rằng để nó hoạt động, bạn cần có trường bình luận mặc định trong nút luôn được đặt tên là bình luận.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.