Як видалити кеш-пам'ять після оновлення / видалення / додавання нового вмісту за допомогою гачків?


11

У нас є модуль спеціальних служб та сайт у Drupal 7, і я отримав завдання видалити кеш-пам'ять після того, як редактор додає новий вміст або оновить існуючий.

Я читав про модуль під назвою " Кеш-дії" , але, як я вже сказав, мені потрібно створити функцію на моєму власному модулі.

Крім того, я почав читати про гачки Drupal, але все ще не знаю, як реалізувати це завдання. Будь-які пропозиції? Дякую.


Це можна здійснити кількома способами. Як часто редактор оновлює / видаляє / додає новий вміст?
Пітер

Дуже часто, тому що ми використовуємо drupal як менеджер даних для створення веб-служб для мобільних додатків. Я не міг точно сказати вам, як часто ми додаємо або змінюємо дані, але головне прохання - очистити кеш-пам'ять кожного разу, коли відбудеться зміна.
Ерзей

Відповіді:


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');
}

Гаразд, я це розумію. Ще одне запитання: чи потрібно додати код у мій файл .module або у файл модуля вузла drupal?
Ерзей

2
Він йде у вашому власному файлі модуля, злом основних файлів - це велике не-ні в Drupal :)
Clive

1

Ви можете легко очистити кеш певних вузлів після їх оновлення. Вих. :

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

Зверніть увагу, що вам потрібно вказати array('absolute' => TRUE).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.