【问题标题】:Joomla progressive cache doesn't handle modules with variable outputJoomla 渐进式缓存不处理具有可变输出的模块
【发布时间】:2014-02-01 15:02:37
【问题描述】:

我有一个模块允许用户选择一个类别,然后用于过滤组件的输出。因此,当用户第一次点击菜单项时,视图会显示所有类别的项目,然后当他们点击模块时,会在 url 中添加一个参数,例如 &catid=69 等,用于过滤显示的项目。

系统插件通过注册额外的“catid”参数来补充行为,即

$registeredurlparams->catid = 'INT';
$app->set('registeredurlparams', $registeredurlparams); 

模块使用类别 id 创建缓存 id,并显示顶级类别 + 所选类别的子类别。

这适用于在系统配置中启用保守缓存和启用系统缓存插件。

我担心的是我无法让它与渐进式缓存一起使用:即使组件输出被正确缓存,模块也没有得到更新(所以我从来没有看到子类别)。

最终我计划在 JED 上提供该扩展,并且我希望与所有可能的缓存配置兼容。是否有可能强制渐进式缓存将我想要的参数添加到缓存ID?

不接受诸如发送完整类别树并使用 ajax 进行处理等变通方法。

【问题讨论】:

  • 用户是否登录?在这两种情况下(保守派和进步派)。
  • 未登录,我认为 Joomla 缓存在用户登录时被设计禁​​用。
  • 是的,这就是我问的原因。我想你已经看过这个了:global module caching 但我还是把它贴出来以防万一。
  • 是的,我读过它,它只是指出,渐进式缓存不考虑单个模块缓存。但是由于渐进式缓存允许在同一个 Itemid 上输出不同版本的组件,我希望可以将相同的行为扩展到没有核心黑客的模块
  • 你有哪个版本的Joomla?这听起来像我的错误。您提到该模块的代码处理缓存 ID 的创建,如果您可以在其中添加用户 ID 以及类别 + 子类别?

标签: caching joomla


【解决方案1】:

您可以查看后端的 ContentModelArticle。你会注意到 cleanCache() 强制清除可能受保存或创建影响的内容模块。

protected function cleanCache($group = null, $client_id = 0)
{
    parent::cleanCache('com_content');
    parent::cleanCache('mod_articles_archive');
    parent::cleanCache('mod_articles_categories');
    parent::cleanCache('mod_articles_category');
    parent::cleanCache('mod_articles_latest');
    parent::cleanCache('mod_articles_news');
    parent::cleanCache('mod_articles_popular');
}

我一直认为这是一个大锤/kludge,因为它不允许网站管理员控制是否执行此操作,但您可以按照为您的模型制作自定义 cleanCache() 的方式做一些事情。

【讨论】:

  • 谢谢@Elin,但是我的模块正在根据用户交互、设置的过滤器等更改输出,而不仅仅是底层结构的变化(我已经为此发出了适当的 cleanCache() )。我是具有清理缓存功能的 LittleHelper 软件包的开发人员,但这完全违背了我的目的:此时强制关闭缓存会更容易,因为它不会产生清理缓存的开销...
  • 我认为这是本案的最佳创意。
猜你喜欢
  • 2012-09-26
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
相关资源
最近更新 更多