【问题标题】:Joomla onPrepareContent event not triggeringJoomla onPrepareContent 事件未触发
【发布时间】:2013-05-29 12:32:14
【问题描述】:

我正在开发一个利用 onPrepareContent() 事件的 Joomla 插件。但是,我确定如果启用缓存并且内容被缓存(即在cache/com_content 中),则该事件不会被调度。

即使文章被缓存并且文章数据可用,我如何对文章的查看采取行动? (我指定了最后一个条件,否则,我可以只使用系统事件 - 例如 onAfterRoute() 或类似的

【问题讨论】:

    标签: events caching joomla joomla1.5


    【解决方案1】:

    缓存背后的想法确实是数据被检索一次并服务多次,因此在缓存加载期间它不会在任何地方可用;因此,在您的插件中,您可以访问数据库并使用不同的事件(例如 onAfterRoute())加载文章,但是您当然会减慢您的网站速度,并且可能基于 ajax 浏览器的替代方案可以实现相同的目的(您尚未澄清)。

    如果您只想在有限数量的文章中实现此目的,另一种方法是强制 Joomla 不缓存文章,但这很可能需要核心 hack,并且不会比我使用插件更快上面写的。

    【讨论】:

    • 我绝对警惕做任何会减慢网站速度的事情。我目前专门为 com_content 禁用了缓存,这显然会造成很大的影响,但在这种情况下,必须功能:它是访问控制。
    • 等等,访问控制意味着您有不同的用户组,并且任何差异只有在他们登录后才会影响他们:但默认情况下对登录用户禁用页面缓存,因此它不应该是问题。
    • 我的访问控制的某些元素适用于未登录的用户。
    • 好吧,我的意思是:未登录的用户或访客都将看到相同的内容:因此,相同的缓存对所有人都适用;对于其他所有人,页面缓存将被禁用。这并不意味着 onPrepareContent() 不会被调用:每次缓存刷新都会调用一次,默认为 15 分钟。
    • 好的,但我需要的是在每次查看文章时执行一些代码(严格来说是 /attempted/ 被查看),并且该代码具有文章的可见性。实现这一目标的最佳方法是什么?
    【解决方案2】:

    在 Joomla 3.4.0 中,我尝试在内容插件中使用系统事件,当内容被缓存时它们不会触发;只有一次,当页面第一次加载和缓存时。之后,他们不再开火。我猜内容插件只有在页面被缓存时才会被调用,无论它包含什么事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 2011-12-30
      • 2010-11-08
      • 2019-01-31
      • 2013-04-09
      • 2015-07-25
      • 2017-06-25
      相关资源
      最近更新 更多