Joomla 渐进式缓存不处理具有可变输出的模块

Posted

技术标签:

【中文标题】Joomla 渐进式缓存不处理具有可变输出的模块【英文标题】:Joomla progressive cache doesn't handle modules with variable output 【发布时间】: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 以及类别 + 子类别? 【参考方案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 软件包的开发人员,但这完全违背了我的目的:此时强制关闭缓存会更容易,因为它不会产生清理缓存的开销... 我认为这是本案的最佳创意。

以上是关于Joomla 渐进式缓存不处理具有可变输出的模块的主要内容,如果未能解决你的问题,请参考以下文章

在 Joomla 3x 中覆盖 JE 快速联系模块

两个不同的joomla模块,显示相同的信息

如何训练具有可变输出大小的对象检测模型?

显示相同信息的两个不同的 joomla 模块

仅在特定文章中显示 Joomla 模块?

如何将 Joomla 组件调用到模块中?