Кэширование в Render API
В Drupal 7, в калбаках меню или любых других функциях, которые что-то выводят на экран, принято возвращать "рендер массив". Преимуществом такого подхода является возможность альтерить данные перед их преобразованием в html.
В Render API есть система кэширования, которая включается при добавлении в рендер массив параметра #cache. Пример ниже.
Как это было в Drupal 6:
/**
* Menu callback
*/
function mymodule_page() {
if ($cache = cache_get('mymodule:titles')) {
$output = $cache->data;
}
else {
$output = theme('item_list', mymodule_get_titles());
cache_set('mymodule:titles', $output, 'cache', time() + 60*60);
}
return $output;
}
Как нужно делать в Drupal 7:
/**
* Menu callback
*/
function mymodule_page() {
$build['titles'] = array(
'#theme' => 'item_list',
'#items' => array(),
'#pre_render' => array('mymodule_page_titles_pre_render_callback'),
'#cache' => array(
'keys' => array('mymodule', 'titles'),
'bin' => 'cache',
'expire' => REQUEST_TIME + 60*60,
),
);
return $build;
}
/**
* Pre render callback
*/
function mymodule_page_titles_pre_render_callback($element) {
$element['#items'] = mymodule_get_titles();
return $element;
}
Написанное актуально для
Drupal 7
Комментарии:
Нету комментариев для вывода...