Bagaimana cara menyembunyikan komentar di bawah simpul, tetapi tidak menutupnya?

8

Sebenarnya saya ingin membuat daftar komentar untuk node sendiri (oleh Views, misalnya), jadi saya perlu menyembunyikan daftar komentar standar dari modul komentar inti. Saya bisa melakukannya seperti itu:

  unset($node['comments']['comments']);

Tetapi itu tidak akan mencegah permintaan DB untuk komentar.
Jadi saya menemukan beberapa cara gila untuk mengelabui modul komentar. Misalnya, untuk menetapkan $node->previewproperti palsu , atau untuk membuat mode tampilan baru dan menimpa node/%nodepanggilan balik standar .

Apakah benar-benar sangat sulit untuk menyembunyikan komentar di bawah simpul tetapi masih memungkinkan untuk menambahkan komentar baru, atau saya melewatkan sesuatu?

Perbarui tentang opsi "Tersembunyi"

Bagaimana dengan nilai "Tersembunyi" untuk jenis konten:
Saya perlu perilaku dekat / terbuka untuk komentar saya. Tetapi jika saya mengatur "Tersembunyi" untuk tipe konten saya, konten baru saya disetel ke "Komentar ditutup" alih-alih disembunyikan (di sini adalah kodenya ). Masalah lain adalah bahwa pengguna dengan izin untuk "memposting komentar" tidak dapat menambahkan komentar, jika komentar disembunyikan (di sini adalah kodenya ).
Jadi saya tidak bisa mendapatkan ide.

Menjawab

Solusi ditemukan dengan hook_module_implements_alter(). Terima kasih banyak!

kalabro
sumber
itu mudah ... edit jenis konten, di bawah pengaturan komentar pilih "Tersembunyi". ini akan menyembunyikan komentar Anda
subhojit777
@ subhojit777 OP ingin mencegah permintaan DB saya pikir.
niksmac

Jawaban:

9

Dalam modules / comment / comment.module kita dapat melihat bahwa hook_node_view () (comment_node_view ()) berjalan di baris 614. Di sinilah fungsi-fungsinya diaktifkan untuk memuat semua komentar dan melampirkannya ke node. 2 set pertama if () {...} tampaknya menangani form tambah komentar dan tautan tindakan. Kemudian blok kode terakhir akhirnya menambahkan komentar, yang saya percaya adalah apa yang sebenarnya paling Anda khawatirkan untuk disembunyikan, dan saya berasumsi Anda ingin ini dilewati karena alasan kinerja:

// Only append comments when we are building a node on its own node detail
// page. We compare $node and $page_node to ensure that comments are not
// appended to other nodes shown on the page, for example a node_reference
// displayed in 'full' view mode within another node.
if ($node->comment && $view_mode == 'full' && node_is_page($node) && empty($node->in_preview)) {
  $node->content['comments'] = comment_node_page_additions($node);
}

Saya pikir kode ini konyol, karena modul komentar tidak boleh bergantung pada mode tampilan hardcoded tertentu. Semoga ini akan berubah dan menjadi pengaturan di UI.

Terlepas dari itu, saya telah menemukan posting serupa yang mungkin menarik bagi Anda: Apakah ada cara untuk menghentikan comment_node_view agar tidak diaktifkan?

Pada dasarnya Anda ingin menggunakan hook_module_implements_alter () untuk menghentikan modul komentar agar tidak dapat mengaktifkan hook_node_view (). Inilah yang perlu Anda tambahkan ke modul khusus Anda:

function hook_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'node_view') {
    unset($implementations['comment']);
  }
}
Charlie Schliesser
sumber
1
Terima kasih banyak! Khusus untuk hook_module_implements_alter!
kalabro