Как удалить кеш после обновления / удаления / добавления нового контента с помощью хуков?

11

У нас есть модуль пользовательских сервисов и сайт в Drupal 7, и я получил задачу удалить кеш после того, как редактор добавит новый контент или обновит существующие.

Я читал о модуле под названием Cache Actions , но, как я уже сказал, мне нужно создать функцию в моем пользовательском модуле.

Кроме того, я начал читать о хуках Drupal, но до сих пор не знаю, как реализовать эту задачу. Какие-либо предложения? Спасибо.

Erzei
источник
Это может быть реализовано несколькими способами. Как часто ваш редактор обновляет / удаляет / добавляет новый контент?
Питер
Очень часто, потому что мы используем 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');
}
Клайв
источник
Хорошо, я понимаю это. Еще один вопрос, мне нужно добавить код в мой файл .module или в файл модуля узла drupal?
Erzei
2
Он идет в вашем собственном модульном файле, взломать основные файлы в Drupal
Clive
1

Вы можете легко очистить кеш определенных узлов после их обновления. Ex. :

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

Обратите внимание, что вам необходимо указать array('absolute' => TRUE).

Аджай Гадхавана
источник