Модуль Menu Callback Cache реализует API для кеширования вызовов меню. Этот подход эффективен в том случае, если у вас есть свой модуль, который определяет вызовы для своей страницы в 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
: