joomla插件在没有缓存的情况下可以正常使用,而在有缓存的情况下则无法使用。

问题描述 投票:0回答:1

如果关闭缓存,那么一切都能正常工作.如果你启用缓存,插件在开始时能正常工作,但5分钟后它会停止处理行.正常或渐进式缓存--这并不重要.当你删除缓存时--处理再次打开,5分钟后它又消失了.这里是完整的插件代码.可能是什么原因呢?代码插入到材料中,例如{robokassa 5}。


 class plgContentRobokassa extends JPlugin
{
    public $cont='';
    public function onContentPrepare($context, &$row, &$params, $page = 0)
    {
     $doc  = JFactory::getDocument();
     $doc->addStyleSheet(JURI::root(true).'/plugins/content/robokassa/css/robokassa.css');
     $this->cont=$context;
    }


    public function onAfterRender()
    {
 $is_test='0';
 $mrh_pass1='*****';
 $mrh_login='******';
        $app = JFactory::getApplication();
        if ($app->getName() != 'site') {
            return true;
        }

        // Получаем кодовое слово из параметров
        $varname = 'robokassa';

        //Получаем тело сайта
        $html = $app->getBody();

        // Если тегов нет
        if (strpos($html, $varname) === false)
        {
            return true;
        }
        $bodyPos = stripos($html, '<body');
        $preContent = '';
        if ($bodyPos > -1)
        {
            $preContent = substr($html, 0, $bodyPos);
            $html = substr($html, $bodyPos);
        }

        //Задаем шаблон поиска
        $pattern = '#\{' . $varname . ' ([0-9]+)\}#i';

        //Закидываем все найденные шаблоны в массив
        if (preg_match_all($pattern, $html, $matches))
        {
         $db = JFactory::getDbo();
         $query = $db->getQuery(true);
            foreach ($matches[0] as $i => $match)
            {
                *replace code here*
            }
             $html=$preContent.$html.$script_alert;
            //Запихиваем всё обратно в тело
            $app->setBody($html);
        }
    }
}

caching plugins joomla
1个回答
0
投票

插件事件是按照插件管理中的顺序调用的。缓存 属于 系统插件 所以当他们的缓存有效时,响应会从Cache中获取,而在它之前的插件不会被执行。

你可以通过将你的插件移到Cache之后(或最后一个)来解决这个问题。

如果是不同种类的插件,即内容,就没有办法实现。

你可以把它改成系统插件(任何插件类别的所有事件也可以在系统插件中找到)。

另一种选择,你可以把你的代码放在一个模块中,防止模块中的缓存;但这对页面缓存是无效的。

最后,我不知道为什么我没有先写出来,可以对一个你不会缓存的页面进行Ajax调用(通过排除它在 page cache 插件配置:这样页面就会被缓存,每次都会检索到当前的数据。

© www.soinside.com 2019 - 2024. All rights reserved.