Drupal + кеширование фрагментов страницы - PullRequest
4 голосов
/ 17 ноября 2010

наш сайт на drupal имеет некоторый пользовательский контент. Когда мы включаем кэширование страниц, вся страница кэшируется. Разве нельзя кешировать только фрагменты страницы. Или указать какие фрагменты не кешировать? Или даже указать, какие страницы не кэшировать. Таким образом, мы можем удалить некоторые вещи из кэша при входе в систему. Или не использовать кэшированные версии при входе в систему.

Я уже нашел этот сайт, но он не работает: http://www.jpstacey.info/blog/2009/03/03/how-to-not-cache-a-particular-drupal-page

Но, похоже, это не работает.

С уважением, Даан

Ответы [ 3 ]

6 голосов
/ 18 ноября 2010

Во-первых, я предложил Рану Бар-Зиксу поместить данные «не для кэширования» в отдельный блок и установить для этого блока значение BLOCK_NO_CACHE, так как это простейшее решение.

Если это невозможно, вы можете отключить кеширование определенных страниц, но вопреки предложению из ссылки, которую вы разместили, я бы сделал это, предотвратив кэширование страницы в первую очередь (вместо удаления кеша). запись потом).

Для этого вы можете временно изменить настройку глобального кэша на странице, о которой идет речь:

// Disable caching for this request cycle
$GLOBALS['conf']['cache'] = FALSE;

То, куда вы поместите этот код, зависит от страниц, которые вы хотите исключить из кэширования:

  • Если это пользовательский тип узла, полученный из вашего собственного модуля, вы должны поместить его в hook_view.
  • Если вы хотите сделать это для типа узла, поступающего из других модулей, вы можете поместить его в операционную часть 'view' в реализации hook_nodeapi(). ** Это также будет работать для отдельных узлов, если вы добавите проверку идентификатора узла перед отключением кэша.
  • Если вам нужно сделать это на основе путей, вы можете поместить его в реализацию hook_init(), проверяя путь (или псевдоним пути), чтобы решить, следует ли отключить кэширование или нет.

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

3 голосов
/ 17 ноября 2010

Вы можете поместить данные, которые не хотите кэшировать, в блок и использовать BLOCK_NO_CACHE, чтобы предотвратить кэширование этого блока. Это очень просто сделать и объяснить в drupal.api: http://api.drupal.org/api/drupal/modules--block--block.module/constant/BLOCK_NO_CACHE/6

0 голосов
/ 18 ноября 2010

Да!Например, Drupal кеширует меню по умолчанию.Это обычно на каждой странице.

См. Методы получения и установки кэша (ниже).Вы можете сделать свой собственный, установив уникальный идентификатор кэша.

http://api.drupal.org/api/drupal/includes--cache.inc/function/cache_get
http://api.drupal.org/api/drupal/includes--cache.inc/function/cache_set

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...