我有一个我写的非常基本的自定义模块...它只是在页脚中添加了一个小块来使用Media Forge进行跟踪。它添加的标签会有所不同,具体取决于您是否在产品视图页面上。这工作很棒....直到我打开缓存。现在,如果您刷新缓存并加载产品视图页面,则会获得产品视图页面的正确块。如果您然后转到另一个页面(例如,主页),它仍然使用产品视图页面的块。如果我刷新缓存并重新加载主页,它现在正在使用正确的主页,但是如果我现在转到产品页面,它会使用错误的那个。所以这肯定是一个缓存问题,我只是不明白我应该如何解决这个问题。
我会粘贴下面的文件内容。我期待着任何回复!
布局XML文件:
<layout version="0.1.0">
<!-- DEFAULT TAG -->
<default>
<reference name="footer">
<block type="core/template" name="mediaforge_footer" as="mediaforge_footer" template="tracking/mediaforge_default.phtml"/>
</reference>
</default>
<!-- PRODUCT VIEW PAGES -->
<catalog_product_view>
<reference name="mediaforge_footer">
<action method="setTemplate"><template>tracking/mediaforge_product.phtml</template></action>
</reference>
</catalog_product_view>
</layout>
我的自定义模块的config.xml:
<config>
<modules>
<VPS_Tracking>
<version>0.1.0</version>
</VPS_Tracking>
</modules>
<frontend>
<layout>
<updates>
<vps_tracking>
<file>vps_tracking.xml</file>
</vps_tracking>
</updates>
</layout>
</frontend>
</config>
将此添加到footer.phtml的末尾:
<?php echo $this->getChildHtml('mediaforge_footer'); ?>
模块定义非常基本,两个模板文件 mediaforge_default.phtml
和 mediaforge_product.phtml
非常简单,所以我不打算包括它们
有什么想法吗?
答案 0 :(得分:0)
简而言之,您需要为块定义缓存键,这意味着您需要使用除Mage_Core_Block_Template之外的其他内容。创建自己的块时,将其添加到构造函数:
protected function _construct() {
$this->addData(array(
'cache_lifetime' => 3600,
'cache_key' => $this->someMethodToDifferentiatePages(),
));
}
最后一个方法需要为块的每个用例返回一个不同的字符串(例如,一个用于目录页面,一个用于“其他”,如果你需要的话)。这将告诉Magento使用哪个缓存版本
希望有所帮助!
谢谢, 乔