Кэширование в 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
Теги:
кэширование
Добавлено: 29 Июля 2018 22:14:14 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...