我对在整页缓存情况下的magento中如何打孔很感兴趣。这与企业版及其整页缓存和打孔机制的工作方式没有直接关系,只是一般而言。
由于magento生成消息块的方式,我真的很好奇如何在打孔情况下处理消息块?
以前有没有任何magento开发人员解决过这个问题,也许可以向我解释这个特定的块是如何打孔的?
我对在整页缓存情况下的magento中如何打孔很感兴趣。这与企业版及其整页缓存和打孔机制的工作方式没有直接关系,只是一般而言。
由于magento生成消息块的方式,我真的很好奇如何在打孔情况下处理消息块?
以前有没有任何magento开发人员解决过这个问题,也许可以向我解释这个特定的块是如何打孔的?
您需要将缓存容器链接到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,因此您无需提供模板。所以不妨从代码中删除那些注释行。
希望这可以帮助您完成手头的任务!