布局缓存问题

时间:2011-04-21 17:20:18

标签: caching layout magento

我有一个我写的非常基本的自定义模块...它只是在页脚中添加了一个小块来使用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 非常简单,所以我不打算包括它们

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

简而言之,您需要为块定义缓存键,这意味着您需要使用除Mage_Core_Block_Template之外的其他内容。创建自己的块时,将其添加到构造函数:

protected function _construct() {
    $this->addData(array(
        'cache_lifetime' => 3600,
        'cache_key'      => $this->someMethodToDifferentiatePages(),
    ));
}

最后一个方法需要为块的每个用例返回一个不同的字符串(例如,一个用于目录页面,一个用于“其他”,如果你需要的话)。这将告诉Magento使用哪个缓存版本

希望有所帮助!

谢谢, 乔