Làm cách nào để xóa bộ đệm sau khi cập nhật / xóa / thêm nội dung mới bằng cách sử dụng hook?


11

Chúng tôi có một mô-đun dịch vụ tùy chỉnh và một trang web trong Drupal 7 và tôi có nhiệm vụ xóa bộ đệm sau khi trình chỉnh sửa thêm nội dung mới hoặc cập nhật những nội dung hiện có.

Tôi đã đọc về một mô-đun có tên Hành động bộ đệm , nhưng, như tôi đã nói, tôi cần tạo chức năng trên mô-đun tùy chỉnh của mình.

Ngoài ra, tôi đã bắt đầu đọc về móc Drupal, nhưng vẫn không có manh mối về cách thực hiện nhiệm vụ này. Bất kỳ đề xuất? Cảm ơn.


Điều này có thể được thực hiện theo một vài cách. Bao lâu thì biên tập viên của bạn cập nhật / xóa / thêm nội dung mới?
Peter

Rất thường xuyên, bởi vì chúng tôi sử dụng drupal làm người quản lý dữ liệu để tạo các dịch vụ web cho ứng dụng di động. Tôi không thể cho bạn biết chính xác tần suất chúng tôi thêm hoặc sửa đổi dữ liệu, nhưng yêu cầu chính là xóa bộ nhớ cache mỗi khi có thay đổi.
Erzei

Câu trả lời:


12

Có vẻ như bạn đã có một mô-đun tùy chỉnh, nhưng chỉ trong trường hợp bạn chưa thấy Hướng dẫn của Nhà phát triển mô-đun .

Các hook bạn đang tìm là hook_node_insert()hook_node_update(), và chức năng xóa bộ đệm sẽ là cache_clear_all()hoặc drupal_flush_all_caches. Cái trước sẽ cho phép bạn xóa các thùng bộ nhớ cache cụ thể (và thậm chí cả các mục bộ đệm cụ thể), và cái sau sẽ xóa hoàn toàn mọi thứ.

Ví dụ:

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

hoặc để chỉ xóa bộ đệm trang tĩnh sau khi một nút đã được cập nhật:

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

Ok, tôi hiểu rồi Chỉ còn một câu hỏi nữa, tôi có phải thêm mã trong tệp .module của mình hoặc trong tệp mô-đun nút của drupal không?
Erzei

2
Nó đi vào tệp mô-đun của riêng bạn, việc hack các tệp cốt lõi là một điều không nên làm trong Drupal :)
Clive

1

Bạn có thể dễ dàng xóa bộ đệm nút cụ thể sau khi cập nhật chúng. Ví dụ. :

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

Xin lưu ý rằng bạn phải xác định array('absolute' => TRUE).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.