我对在整页缓存情况下如何在magento中进行打孔感兴趣。这与企业版本没有直接关系,它的整页缓存和打孔机制可能是如何工作的。总的来说。
由于magento生成消息块的方式,我真的非常好奇如何在打孔情况下处理消息块?
有没有magento devs在那里解决这个问题,也许可以向我解释一下这个特殊的块是如何打孔的?
答案 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,因此您无需提供模板。所以不妨从代码中删除那些注释行。
希望这可以帮助您完成手头的任务!