【问题标题】:Joomla: Is there a module render plugin event?Joomla:有模块渲染插件事件吗?
【发布时间】:2012-02-19 17:24:23
【问题描述】:

由于某些缓存问题,如果存在某些 URL 参数,我需要针对特定​​模块显式绕过缓存。我找到的解决方法是破解libraries/joomla/document/html/renderer/module.php 中的render() 函数,如下所示:

function render( $module, $params = array(), $content = null )
{
    // Existing code:
    $mod_params = new JParameter( $module->params );

    // My hack:
    if ($module->module == 'mod_foo')
    {
        if (certain URL parameters are present)
        {
            $mod_params->set('cache', 0);
        }
    }
    ...
}

当然,破解 joomla 核心代码是一个糟糕的想法,如果可能的话,我想避免这种想法。那么,是否有一个合适的钩子我可以插入以实现相同的效果?我不认为我可以在模块级别做任何事情,因为如果渲染器已经决定从缓存中获取它,它甚至不会被检查。

【问题讨论】:

    标签: plugins joomla joomla1.5


    【解决方案1】:

    要回答第一个问题,不存在模块渲染事件,这里是the plugin doc's and the list of events in Joomla!

    关闭模块的缓存。

    请参阅The Art Of Joomla 上的这篇文章,您可以查看其他文章:

    1. Using Cache to Speed Up your code

    2. JCache API

    【讨论】:

    • 不幸的是,目前这不是一个选项。关闭模块的缓存会在重负载下杀死站点。这并不奇怪,因为当前配置使用 huge 数量的 DB 查询:大约 300 个用于主页。当然,打开缓存可以减少这种情况(尽管仍然远未达到合理水平......),并且几乎可以让网站在压力下呼吸。
    • 只为你的模块关闭缓存会杀死网站?
    • 模块,不是 my 模块 ;-) 是的,该站点只能处理一定数量的流量(就像 any 站点)和约 300 个数据库查询与约 150 个查询(或任何确切的差异 - 它当然很大)足以处理当前流量。当然,随着流量的增加,我要么需要继续优化站点/代码(看起来还有很长的路要走……),要么投入更多的硬件。缓存一些最糟糕的模块是这个过程的第一步。
    • P.S.值得一提的是,为页面上的每个链接执行数据库查找的 SEF 模块并没有帮助。我正在缓存的模块输出 ~ 100 个链接。
    • 啊……我的错 - 没有模块渲染事件(更新了我的答案)。也许模块的数据库访问可以改进?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2013-12-20
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 2010-12-18
    • 2017-01-15
    相关资源
    最近更新 更多