2

我对在整页缓存情况下的magento中如何打孔很感兴趣。这与企业版及其整页缓存和打孔机制的工作方式没有直接关系,只是一般而言。

由于magento生成消息块的方式,我真的很好奇如何在打孔情况下处理消息块?

以前有没有任何magento开发人员解决过这个问题,也许可以向我解释这个特定的块是如何打孔的?

4

1 回答 1

1

您需要将缓存容器链接到core/messages块以防止块缓存。为了达到您的目标,您将需要一个基本模块,或者将其添加到您现有的模块之一中,以最适合您(阅读:更合乎逻辑)的地方为准。

your_module/etc/您需要在其中创建文件cache.xml

<config>
    <placeholders>
        <your_module_messages>
            <block>core/messages</block>
            <placeholder>SYSTEM_MESSAGES</placeholder>
            <container>Your_Module_Model_PageCache_NoCache</container>
        </your_module_messages>
     </placeholders>
 </config>

Your_Module_Model_PageCache_NoCache需要扩展,并且在该Enterprise_PageCache_Model_Container_Abstract扩展中,您需要覆盖该saveCache()方法并直接返回$this而不是触发底层$this->_saveCache(). 也许通过更多的逻辑,你可以让这个打孔更聪明一点,但现在假设你永远不知道什么时候有新消息,从而让这个洞一直打开。

public function saveCache($blockContent)
{
    return $this;
}

剩下的唯一一件事就是触发 Magentocore/messages从整体中加载块。您可以通过将以下方法添加到您的类来完成此操作。

protected function _renderBlock()
{
    $block = $this->_placeholder->getAttribute('block');
    //$template = $this->_placeholder->getAttribute('template');

    $block = new $block;
    //$block->setTemplate($template);
    $block->setLayout(Mage::app()->getLayout());

    return $block->toHtml();
}

它将从cache.xml文件中获取块信息并返回块的输出。由于core/messages实际生成了它自己的 HTML,因此您无需提供模板。所以不妨从代码中删除那些注释行。

希望这可以帮助您完成手头的任务!

于 2012-08-01T20:54:05.623 回答