วิธีการลบแคชหลังจากอัพเดต / ลบ / เพิ่มเนื้อหาใหม่โดยใช้ hooks?


11

เรามีโมดูลบริการที่กำหนดเองและเว็บไซต์ใน Drupal 7 และฉันมีหน้าที่ลบแคชหลังจากที่ผู้แก้ไขเพิ่มเนื้อหาใหม่หรืออัปเดตเนื้อหาที่มีอยู่

ฉันได้อ่านเกี่ยวกับโมดูลที่เรียกว่าCache Actionsแต่อย่างที่ฉันพูดฉันต้องสร้างฟังก์ชันในโมดูลที่กำหนดเองของฉัน

นอกจากนี้ฉันได้เริ่มอ่านเกี่ยวกับ Drupal hooks แล้ว แต่ก็ยังไม่รู้ว่าจะใช้งานได้อย่างไร ข้อเสนอแนะใด ๆ ขอบคุณ


สามารถดำเนินการได้สองสามวิธี บรรณาธิการของคุณอัพเดต / ลบ / เพิ่มเนื้อหาใหม่บ่อยแค่ไหน?
ปีเตอร์

บ่อยครั้งมากเพราะเราใช้ drupal เป็นผู้จัดการข้อมูลเพื่อสร้างบริการเว็บสำหรับแอพมือถือ ฉันไม่สามารถบอกคุณได้ว่าเราเพิ่มหรือแก้ไขข้อมูลบ่อยแค่ไหน แต่คำขอหลักคือการล้างแคชทุกครั้งที่มีการเปลี่ยนแปลงเกิดขึ้น
Erzei

คำตอบ:


12

มันเสียงเหมือนคุณมีอยู่แล้วโมดูลที่กำหนดเอง แต่เพียงในกรณีที่คุณยังไม่ได้ดูคู่มือนักพัฒนาซอฟต์แวร์โมดูลของ

ตะขอที่คุณกำลังมองหาอยู่hook_node_insert()และhook_node_update()และฟังก์ชั่นการล้างแคชอย่างใดอย่างหนึ่งจะเป็นหรือcache_clear_all() drupal_flush_all_cachesอดีตจะช่วยให้คุณล้างถังขยะเฉพาะ(และแม้แต่รายการแคชเฉพาะ) และหลังจะล้างทุกอย่าง

ตัวอย่างเช่น:

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

หรือเพื่อล้างเฉพาะแคชเพจแบบสแตติกหลังจากโหนดได้รับการอัพเดต:

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

ตกลงฉันเข้าใจ อีกเพียงหนึ่งคำถามฉันต้องเพิ่มรหัสในไฟล์. โมดูลของฉันหรือในไฟล์โมดูลโหนดของ drupal หรือไม่
Erzei

2
มันจะไปในแฟ้มโมดูลของคุณเองแฮ็ไฟล์หลักเป็นใหญ่ไม่มีไม่มีใน Drupal :)
ไคลฟ์

1

คุณสามารถล้างแคชโหนดที่ระบุได้อย่างง่ายดายหลังจากอัปเดต อดีต :

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

array('absolute' => TRUE)โปรดทราบว่าคุณจะต้องจำเป็นต้องระบุ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.