如何处理Magento打孔中的消息块

时间:2012-07-31 17:36:18

标签: magento

我对在整页缓存情况下如何在magento中进行打孔感兴趣。这与企业版本没有直接关系,它的整页缓存和打孔机制可能是如何工作的。总的来说。

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

有没有magento devs在那里解决这个问题,也许可以向我解释一下这个特殊的块是如何打孔的?

1 个答案:

答案 0 :(得分: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而不是触发基础{{1} }}。也许有了更多的逻辑,你可以让这个打孔变得更聪明,但现在假设你永远不知道什么时候有新的消息,从而一直打开洞。

$this->_saveCache()

唯一剩下的就是触发Magento从整体中加载public function saveCache($blockContent) { return $this; } 块。您可以通过向您的班级添加以下方法来完成此任务。

core/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实际上已经生成了自己的HTML,因此您无需提供模板。所以不妨从代码中删除那些注释行。

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