Kanca kullanarak yeni içerik güncelledikten / sildikten / ekledikten sonra önbellek nasıl silinir?


11

Drupal 7'de bir özel hizmetler modülümüz ve bir sitemiz var ve editör yeni içerik ekledikten veya mevcut olanları güncelledikten sonra önbelleği silme görevim var.

Önbellek Eylemleri adlı bir modül hakkında okudum , ama dediğim gibi, özel modülümde işlev oluşturmanız gerekiyor.

Ayrıca, Drupal kancaları hakkında okumaya başladım, ancak yine de bu görevin nasıl uygulanacağı hakkında bir fikrim yok. Herhangi bir öneri? Teşekkürler.


Bu birkaç şekilde uygulanabilir. Editörünüz yeni içeriği ne sıklıkla günceller / siler / ekler?
Peter

Çok sık, çünkü mobil uygulamalar için web hizmetleri yapmak için verilerin yöneticisi olarak drupal kullanıyoruz. Size ne sıklıkta veri eklediğimizi veya değiştirdiğimizi tam olarak söyleyemedim, ancak ana istek, her değişiklik olduğunda önbelleği temizlemektir.
Erzei

Yanıtlar:


12

Zaten özel bir modülünüz var gibi görünüyor, ancak Modül Geliştirici Kılavuzu'nu görmüyorsanız .

Aradığınız kancalar vardır hook_node_insert()ve hook_node_update(), ve ya olacak önbelleği temizlemek için işlev cache_clear_all()veya drupal_flush_all_caches. Birincisi, belirli önbellek kutularını (ve hatta belirli önbellek öğelerini) temizlemenize izin verir ve ikincisi kesinlikle her şeyi temizler.

Örneğin:

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

veya bir düğüm güncellendikten sonra yalnızca statik sayfa önbelleğini temizlemek için:

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

Tamam, anlıyorum. Sadece bir soru daha, benim .module dosyama veya drupal düğüm modülü dosyasına kodu eklemek zorunda mıyım?
Erzei

2
Kendi modül dosyanıza gider, çekirdek dosyaları kesmek Drupal'da büyük bir hayırdır :)
Clive

1

Güncelleştirdikten sonra belirli düğüm önbelleğini kolayca temizleyebilirsiniz. Ör. :

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

Lütfen belirtmeniz gerektiğini unutmayın array('absolute' => TRUE).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.