Обмен данными с блоками - PullRequest
       1

Обмен данными с блоками

0 голосов
/ 26 октября 2010

У меня есть страница, которая отображает некоторые данные. Источником данных являются не узлы Drupal, так что Views бесполезен для меня:

function mymodule_main_page($arg1, $arg2, $arg3) {
  $results = call_remote_api_and_get_lots_of_results($arg1, $arg2, $arg3);
  return theme('mymodule_page', $results, $arg1, $arg2, $arg3);
}

Мой модуль также отображает блок. Целью блока является суммирование результатов, которые были возвращены в содержании главной страницы (например: Количество результатов: X, Количество страниц: Y и т. Д.)

/**
 * Implementation of hook_block().
 */
function mymodule_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'view':
      if ($delta == 0) {
        $block['subject'] = t('Results summary');
        $block['content'] = theme('mymodule_results_summary');
      }
      break;
  }
}

Мне нужно избегать генерации результатов снова. Каков наилучший способ для моего блока получить доступ к объекту результатов, возвращенному в функции, которая нарисовала главную страницу? Глобальные или статические переменные? Существует ли модуль, который уже пытается решить эту проблему?

Ответы [ 3 ]

1 голос
/ 27 октября 2010

Очень хорошее и гибкое решение - использование основных функций drupal cache_set и cache_get, как упоминалось в ya.teck, но расширяет его функциональность модулем cacherouter Вы можете указать механизмы хранения кеша и использовать memcache или разделяемую память для кеша.Он не использует базу данных для хранения данных и очень быстро.

0 голосов
/ 26 октября 2010

В дополнение к кеш-системе, о которой упоминает ya.teck, более простым способом является кеширование всего блока за x минут, часов, дней. Drupal имеет встроенную кеш-систему для всех блоков. Вы можете увидеть некоторые настройки на admin/settings/performance

Обновление:
Друпальный способ и core, и contrib заключается в использовании статической переменной, массива или фактической переменной, и сохранении там тяжелой работы. Примером может служить node_load, в котором все загруженные узлы хранятся в массиве, поэтому каждый узел необходимо загружать только один раз во время каждого запроса.

0 голосов
/ 26 октября 2010

Вы можете хранить свои данные с помощью кеш-системы drupal. См. Функции cache_set и cache_get для получения дополнительной информации.

...