Илья Кригоузов Привет, меня зовут Илья Кригоузов и я занимаюсь информационными технологиями с 2005 года. Под такими технологиями я понимаю довольно широкий круг вещей: сайты любой сложности, базы данных и клиент-серверные приложения.
Закончил МИРЭА по специальности «инженер-математик», практику проходил на концерне радиостроения ОАО «Вега».Работаю в Информационных системах для бизнеса, так же сотрудничал с АйТи-агенством.
В свободное время увлекаюсь фотографией. Найти меня вы можете:

29 апреля 2011 г.

Очистить в Drupal кэш для одной ноды

У друпала всегда включен кэш. Даже если в настройках отключено кэширование, сайт все равно будет кэшировать данные, хоть и в меньшем объеме. По большому счету это правильно, но иногда возникают моменты, когда нам это неудобно.

Например у наст есть тип материала «профиль» (не важно, сами мы его сделали с помощью CCK или использовали модуль Content profile) и в профиле есть какое-то поле, которое мы изменяем программно, с помощью модуля. Результат нашего изменения мы не увидим, пока не очистим кэш. Согласитесь, не очень удобно.

Для того чтобы видеть изменения моментально, мы будем очищать кэш при каждом изменении значения поля профиля. Я не буду пользоваться стандартным API, поскольку он может очистить больше, чем нам нужно, а при большом объеме данных это отрицательно скажется на производительности.

Мы же удалим из кэша только тот профиль, который изменили. Поскольку наш профиль — простая нода, то ее хэш хранится в таблице cache_content. Ноду можно идентифицировать по полю cid, которое имеет следующий формат: [content:nid:vid]. Для этого сделаем специальную функцию:
function mymodule_clear_cache_node($nid)
{
      return db_query("DELETE FROM {cache_content} WHERE cid LIKE 'content:%d:%%'", $nid);
}

Комментариев нет:

Отправить комментарий