Очитска кеша при создании материала (ноды)
Прислано: xmls
пн, 23/08/2010 - 19:25
Как очистить кеш при создании ноды?
Очень важный, на мой взгляд, момент. Странно, что нигде не обсуждали.
Есть городской портал, на котором анонимы размещают объявления. Так вот при минимальном времени жизни кеша минут хотя бы в 15 юзеры начинают нервничать, не видя своего объявления...
- xmls's blog
- Для комментирования войдите или зарегистрируйтесь
Все очень важные вопросы решаются десятком строк кода, по этому и не обсуждают
- Для комментирования войдите или зарегистрируйтесь
Хорошо, подскажите, как выполнить код в момент добавления ноды.
Подозреваю, что нужно использовать hook_nodeapi()
- Для комментирования войдите или зарегистрируйтесь
cache_clear_all()
профит
- Для комментирования войдите или зарегистрируйтесь
Это понятно. А как вызвать эту функцию именно в момент добавления матерала. Можно ли использовать хук hook_nodeapi(), не вынося его в отдельный модуль? Извиняюсь за незнание...
Другими словами, как вызвать hook_nodeapi()
- Для комментирования войдите или зарегистрируйтесь
cache_clear_all()
Удалять весь кеш из-за одной публикации - все равно что покупать новый мобильник, всякий раз, когда на него позвонят...
- Для комментирования войдите или зарегистрируйтесь
Как очистить кеш при создании ноды?
Кеш чего?
- Для комментирования войдите или зарегистрируйтесь
а какие таблицы рекомендуете очистить при добавлении ноды?
- Для комментирования войдите или зарегистрируйтесь
Очень важный, на мой взгляд, момент. Странно, что нигде не обсуждали.
Я кеширование уже миллион раз обсуждал...
- Для комментирования войдите или зарегистрируйтесь
cache_clear_all()
профит
http://api.drupal.ru/api/function/node_save посмотри последнюю строчку кода)
- Для комментирования войдите или зарегистрируйтесь
http://api.drupal.ru/api/function/node_save посмотри последнюю строчку кода)
Смотрел))))))
- Для комментирования войдите или зарегистрируйтесь
http://api.drupal.ru/api/function/node_save посмотри последнюю строчку кода)
Кстати, да.
Поэтому стандартное кеширование лучше отключать, и делать по своей стратегии))
- Для комментирования войдите или зарегистрируйтесь
Короче, написал такой модуль. Вроде справляется с задачей...
<?php
function mycache_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'insert':
cache_clear_all('*', 'cache_views', '*');
cache_clear_all('*', 'cache_views_data', '*');
cache_clear_all('*', 'cache_block', '*');
cache_clear_all('*', 'cache_page', '*');
cache_clear_all('*', 'cache_content', '*');
cache_clear_all('*', 'cache', '*');
}
}
?>- Для комментирования войдите или зарегистрируйтесь
Вообще то кэш должен для этой страницы автоматом обновится, дело все в том, что при сохранении ноды сохраняется свойство changed, и если механизм кэширования который используется не кривой, то при обращении к кэшу за страницей даже с 15 минутным интервалом механизм должен при генерации md5 ключа учитывать это свойствосвойства ноды. Точнее даже не кэш обновится, а перед обращением к кэшу получить все таки значение поля changed, сгенерить с учетом него md5 хэш и уже его искать в кэше. Тогда вообще на 15 минутный интервал будет чхать, главное запрос сделать к бд чтобы получить changed,но это все равно дешевле чем если бы всю ноду рендерить, когда она готовая в кеше лежит.
Да и чистка кэша при сохранении каждого узла операция весьма тяжелая все таки, не знай зачем в друпал так сделано.
- Для комментирования войдите или зарегистрируйтесь
Эх, любители писать новые модули... Поиск по готовым модулям друпала решил бы ваши проблемы :)
Content Refresh модуль.
- Для комментирования войдите или зарегистрируйтесь




Комментарии