Bagaimana cara menghapus cache setelah memperbarui / menghapus / menambahkan konten baru menggunakan kait?

11

Kami memiliki modul layanan khusus dan situs di Drupal 7, dan saya mendapat tugas untuk menghapus cache setelah editor menambahkan konten baru atau memperbarui yang sudah ada.

Saya sudah membaca tentang modul yang disebut Tindakan Cache , tetapi, seperti yang saya katakan, saya perlu membuat fungsi pada modul kustom saya.

Juga, saya sudah mulai membaca tentang kait Drupal, tetapi masih belum memiliki petunjuk tentang bagaimana menerapkan tugas ini. Ada saran? Terima kasih.

Erzei
sumber
Ini dapat diimplementasikan dalam beberapa cara. Seberapa sering editor Anda memperbarui / menghapus / menambah konten baru?
Peter
Sangat sering, karena kami menggunakan drupal sebagai pengelola data untuk membuat layanan web untuk aplikasi seluler. Saya tidak bisa memberi tahu Anda seberapa sering kami menambahkan atau memodifikasi data, tetapi permintaan utamanya adalah menghapus cache setiap kali terjadi perubahan.
Erzei

Jawaban:

12

Sepertinya Anda sudah memiliki modul khusus, tetapi jika Anda belum melihat Panduan Pengembang Modul .

Kait yang Anda cari adalah hook_node_insert()dan hook_node_update(), dan fungsi untuk menghapus cache akan menjadi cache_clear_all()atau drupal_flush_all_caches. Yang pertama akan membuat Anda menghapus tempat cache spesifik (dan bahkan item cache tertentu), dan yang terakhir akan menghapus semuanya.

Sebagai contoh:

function MYMODULE_node_insert($node) {
  drupal_flush_all_caches();
}

atau untuk menghapus hanya cache halaman statis setelah sebuah node diperbarui:

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}
Clive
sumber
Ok saya mengerti. Hanya satu pertanyaan lagi, apakah saya harus menambahkan kode dalam file .module saya atau dalam file modul simpul drupal?
Erzei
2
Ini masuk dalam file modul Anda sendiri, peretasan file inti adalah no-no besar di Drupal :)
Clive
1

Anda dapat dengan mudah menghapus cache node tertentu setelah memperbaruinya. Ex. :

function MYMODULE_node_update($node) {
  $nodeurl = url('node/'. $node->nid, array('absolute' => TRUE));
  cache_clear_all($nodeurl, 'cache_page');
}

Harap dicatat bahwa Anda harus menentukan array('absolute' => TRUE).

Ajay Gadhavana
sumber