Bagaimana Cara Menghitung Komentar Node di node.tpl?

15

Saya telah memiliki ide cemerlang untuk mengubah izin pengguna saya sehingga tamu tidak dapat melihat komentar pada sebuah node. Saya tidak memiliki masalah dengan Tampilan di sekitar situs saya, karena mereka dapat dengan jelas melihat ada komentar pada node, dan mereka akan lebih cenderung mendaftar. Masalahnya tampaknya ketika mereka tiba di situs saya langsung ke sebuah node, mereka tidak melihat komentar apa pun, dan berpikir "itu sedikit omong kosong; ayo pergi."

Apakah ada cara saya bisa menunjukkan jumlah komentar di bawah titik?

Reg Gordon
sumber

Jawaban:

10

Saya sarankan Anda menggunakan template_preprocess_node () .
Ini adalah contoh dasar untuk D8

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

Dan kemudian Anda dapat menggunakannya dalam node.html.twigfile Anda seperti ini:

{{ comment_count }}

Contoh dasar dalam D6 di bawah ini, Anda dapat menyesuaikannya sesuai dengan keinginan Anda. Di file template.php Anda yang terletak di direktori tema Anda, tambahkan sesuatu di sepanjang baris (ganti YourTHEME dengan nama tema Anda):

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

dan simpan file tersebut. Sekarang di node.tpl.php (atau template yang setara, node-mycontenttype.tpl.php, dll) cukup tambahkan:

<?php print $num_comments; ?>

Di mana pun Anda ingin penghitungan komentar dapat ditemukan dan disimpan. Bersihkan cache dan kemudian lihat perubahan Anda.

Laxman13
sumber
Saya telah mencoba untuk mengadaptasi kode Anda untuk template_preprocess_node ke drupal 7 tetapi saya mendapatkan kesalahan ini. Pemberitahuan: Variabel tidak terdefinisi: num_comments in include () (baris 116
Alexander
Apa yang telah Anda ubah saat beradaptasi? Apakah kueri basis data Anda terlihat seperti yang diberikan oleh @doterobcn di bawah ini?
Laxman13
12

Anda dapat menggunakan $comment_countdi node.tpl.php .

$type: Jenis
$comment_countsimpul , yaitu cerita, halaman, blog, dll : Jumlah komentar yang dilampirkan pada simpul.

graceman9
sumber
Saya kira itu $comment_countmenghitung jumlah komentar yang terlihat oleh pengguna; jika pengguna saat ini tidak dapat melihat komentar, variabel itu akan disetel ke nol.
kiamlaluno
1
Iya. Dan lebih langsung$node->comment_count
artfulrobot
4

Pembaruan, untuk Drupal 7 kueri Anda di template.php akan terlihat seperti:

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

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

Sekarang di page.html.twig:

{{ comment_count }}

Bersihkan cache dan kemudian lihat perubahan Anda.

rpayanm
sumber
Ini benar-benar praktik buruk jika Anda meminta db seperti itu untuk sesuatu yang dapat dilakukan dengan lebih mudah menggunakan Drupal API: $ variable ['node'] -> get ('comment') -> comment_count;
ipwa
@ Ipwa jika Anda tahu nama bidang komentar, kalau tidak itu bukan solusi
golddragon007
0

Di Drupal 8 gunakan ini langsung di templat simpul Anda:

{{ node.comment.comment_count }}

Perhatikan bahwa agar berfungsi, Anda harus memiliki bidang komentar default di simpul Anda yang selalu bernama comment.

ipwa
sumber