如何在组件视图中使用Joomla的缓存?


13

与CMS通常一样,点击率最高的事件仍然是“新的”。我想在给定时间段内首次呈现页面输出时对其进行缓存,以减少生成页面所需的繁重工作量。

我一直在研究JCache文档,并制定了基本的机制,如下所示:

$cache = JFactory::getCache('MyCache', '');
$cache->setCaching(true);
$cache->setLifeTime(86400);  //24 hours
$cache_id = 'MyCache_page_123';
$cached_page= $cache->get($cache_id);
if (!empty($cached_page)) {
    $the_page_output = $cached_page;
}else{
    $the_page_output = ...<div>the generated view HTML</div>....
    $cache->store($the_page_output, $cache_id);
}
// echo or return "$the_page_output"

我一直试图确定应该在哪里创建缓存,然后在再次开始所有工作之前先确定要使用该缓存的“最佳位置” 。

Answers:


9

到目前为止,谷歌搜索使我认为,如果将joomla添加display(true,...)到控制器的显示方法中,则joomla将自动缓存您的组件,如下例所示。
该示例还包括一些测量代码,以检查其是否正常工作(JProfiler部分)。

public function display($cachable = false, $urlparams = array()) {
    $profiler = new JProfiler();//debug

    //Joomla cache only takes format, option, view, layout, tpl, language en id als default cache_id ($urlparams)
    $input  = new Jinput;
    $urlparams['comp_page_specific_id']=$input->getUInt('comp_specific_id');
    $urlparams['comp_page_specific_else']=$input->getUInt('comp_page_specific_else');

    parent::display(true, $urlparams);
    JFactory::getApplication()->enqueueMessage($profiler->mark( ' seconds with caching<br>Only works after someone has visited this page at least once.<br>Can be reset in backend.' ));//debug
}
  • 您必须手动设置,$urlparams以定义哪些组件视图需要不同的缓存(可以这么说urlparams = cache_id)。而且Joomla已经处理了常见的参数,例如格式,选项,视图,布局,tpl,语言en id。

  • 另请注意,您的组件不会进行任何更新。如果模型中有一个命中计数器,则在显示缓存视图时命中数将保持不变

*额外信息:在joomla库的控制器中,以下行调用了视图缓存,如果尚未设置,则同时设置缓存:
$cache->get($view, 'display'); //689: legacy controller

EDIT 2015-01-14:添加了urlparams)
EDIT 2015-01-15:添加了代码的额外信息)


but I can't find any core joomla code where the cache is being set.只是注意-它是里面$cache->get方法
梅德Rekun

哇!那是非常聪明的编码。谢谢(你的)信息。我将更新答案。
e-motiv 2015年

只是要肯定的回答满了,这里
梅德Rekun
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.