好吧,我找到了一些好帖子,并用 实现了我的缓存etc/cache.xml
,它用容器对象包装了我的块。
我的cache.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<placeholders>
<namespace_block_unique_node>
<block>module/block_class</block>
<name>name_of_block_in_my_layout</name>
<template>path/to/my/template</template>
<placeholder>UNIQUE_PLACEHOLDER_HERE</placeholder>
<container>Namespace_Module_Model_Caching_Container_BlockName</container>
<cache_lifetime>86400</cache_lifetime>
</namespace_block_unique_node>
</placeholders>
</config>
我在这里用作block
不应缓存的块,作为name
布局中的块名称,以及container
我选择了我的容器。
容器代码:
<?php
class Namespace_Module_Model_Caching_Container_BlockName extends Enterprise_PageCache_Model_Container_Abstract
{
protected function _getCacheId()
{
return 'NAMESPACE_MODULE_BLOCKNAME' . $this->_getIdentifier();
}
protected function _getIdentifier()
{
return microtime();
}
protected function _renderBlock()
{
$blockClass = $this->_placeholder->getAttribute('block');
$template = $this->_placeholder->getAttribute('template');
$block = new $blockClass;
$block->setTemplate($template);
$layout = Mage::app()->getLayout();
$block->setLayout($layout);
return $block->toHtml();
}
protected function _saveCache($data, $id, $tags = array(), $lifetime = null) { return false;}
}
在这里,我放置microtime()
了识别块的函数,但在我的模块中,我使用了与我的模块相关的 cookie 变量。我相信当什么都没有真正改变时,这可以节省一个块的冗余重新加载。
我在其他教程中没有发现的是我必须创建布局变量并将其分配给我的块,否则我只会得到我的块而不是整个页面。