Menu Callback Cache
Модуль Menu Callback Cache реализует АПИ для кеширования вызовов меню. Этот подход эффективен в том случае, если у вас есть свой модуль, который определяет вызовы для своей страницы в hook_menu(). Такие кеширующие прокси-серверы как Варниш, могут реализовывать своё кеширование для анонимных посетителей, но иногда вам нужно кешировать определённые страницы для всех пользователей. Этот модуль, когда он используется в сочетании с модулем Memcache API and Integration, может быть простым решением для улучшения быстродействия сайта. Однако, вы не ограничены работой только со своими модулями. Можно добавить кеширование вызовов меню, которое определено в других модулях, выполнив hook_menu_alter().
Следующий пример изменяет путь «node/%node» на кешированные страницы документа для этого пользователя на час.
<?php
/**
* Implementation of hook_menu_alter().
*/
function my_module_menu_alter(&$items) {
$items['node/%node']['cache'] = MENU_CALLBACK_CACHE_PER_USER;
$items['node/%node']['cache max age'] = 60 * 60;
$items['node/%node']['cache key callback'] = 'my_module_cache_key_callback';
}
/**
* Cache key callback for path node/%node.
*/
function my_module_cache_key_callback($node) {
// Set the cache key if this node is of type 'page'.
if ($node->type == 'page') {
return __FUNCTION__ . '-' . $node->nid;
}
// Don't cache nodes that aren't type 'page'.
else {
throw new DoNotCacheException();
}
}
?>Этот пример показывает, как можно добавить кеширование в свой модуль для любого пункта меню.
<?php
/**
* Implementation of hook_menu().
*/
function my_module_menu() {
$items = array();
$items['foo'] = array(
'title' => 'Foo',
'description' => 'Foooooooooooooo.',
'page callback' => 'my_module_foo',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
'cache' => MENU_CALLBACK_CACHE_PER_USER,
);
return $items;
}
/**
* Page callback for 'foo/'
*/
function my_module_foo() {
return "This is some content, yo.";
}
?>Включение этого модуля даст возможность определять 3 новых ключа, которые вы можете установить для своих пунктов меню в hook_menu:
- cache: одно из 3 значений (подобно модулю Block):
- MENU_CALLBACK_CACHE_GLOBAL — кеширование вызова меню глобально, для всех пользователей
- MENU_CALLBACK_CACHE_PER_ROLE — кеширование вызова меню для роли пользователя
- MENU_CALLBACK_CACHE_PER_USER — кеширование вызова меню для пользователя
- cache max age (дополнительный): максимальное время кеширование. Если не определено, то используется значение равное 5 минутам
- cache key callback (дополнительный): вызов, который генерирует ключ для кешированных данных. Эта возможность удобна в том случае, если вы хотите принудительно обновить кеш до истечения времени кеширования. Если этот ключ не определён, то он будет сгенерирован автоматически на основе page callback и хеширования его параметров


