Кеш системной страницы друпал - PullRequest
0 голосов
/ 09 марта 2011

Есть ли способ кэшировать страницы системы drupal (например, таксономия / термин /%, форум /%, узел) для авторизованных пользователей без взлома ядра?

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Для Drupal 6 есть http://drupal.org/project/authcache. Я не верю, что есть модуль для Drupal 7, который готов.

0 голосов
/ 11 марта 2011

Вы можете запустить hook_menu_alter в своем пользовательском модуле, и оттуда вы можете делать с этим путем все, что захотите (таксономия / термин /%).

функция обратного вызова для этих путей.Например:

mysql>
select * from menu_router where path like '%taxonomy/term/%';

Это говорит о том, что обратный вызов страницы равен taxonomy_term_page .Вам не нужно копировать весь этот код в свою пользовательскую функцию, все, что вам нужно сделать, это примерно так:

function mymodule_menu_alter(&$items) {
  // Route taxonomy/term/% to my custom caching function.
  $items['taxonomy/term/%']['page callback'] = 'mymodule_cached_taxonomy_term_page';
}

function mymodule_cached_taxonomy_term_page($term) {
  // Retrieve from persistent cache.
  $cache = cache_get('taxonomy_term_'. $term); 

  // If data hasn't expired from cache.
  if(!empty($cache->data) && ($cache->created < $cache->expire)) {
    return $cache->data;
  } else {
  // Else rebuild the cache.
    $term_page = taxonomy_term_page($term);
    cache_set('taxonomy_term_'. $term, $term_page, 'cache_page', strtotime('+30 minute'));
    return $term_page;
  }
}

Если вы пойдете по этому пути, вы захотите ознакомиться с cache_get и cache_set .Возможно, вы захотите также проверить отличное кэширование Lullabot article .

Вы можете использовать тот же подход для forum /%, node и всего остального, что вы хотите.Удачного кеширования!

...