Вы здесь

Menu Callback Cache

API для кеширования вызов меню.

Модуль 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:

  • 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 и хеширования его параметров
Зависит от: