我有一个显示一些数据的页面。数据源不是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;
}
}
我需要避免再次产生结果。我的块访问绘制主页的函数中返回的结果对象的最佳方法是什么?全球或静态变量?是否存在已经尝试解决此问题的模块?
答案 0 :(得分:1)
非常好且灵活的解决方案是使用drupal核心函数cache_set和cache_get作为ya.teck提到但是使用cacherouter模块扩展其功能。您可以指定缓存存储引擎,并使用内存缓存或共享内存进行缓存。它不使用数据库来存储数据,而且速度非常快。
答案 1 :(得分:0)
答案 2 :(得分:0)
除了ya.teck提到的缓存系统之外,更简单的方法是将整个块缓存x分钟,小时,天。 Drupal为所有块都有一个内置的缓存系统。您可以在admin/settings/performance
<强>更新强>
核心和contrib的drupal方式是使用静态变量数组或实际变量并在那里存储繁重的数据。一个示例可以是node_load,它将所有已加载的节点存储在一个数组中,因此每个节点只需要在每个请求期间加载一次。