【问题标题】:Layout Cache Issue布局缓存问题
【发布时间】:2011-08-10 11:49:03
【问题描述】:

我编写了一个非常基本的自定义模块...它只是在页脚中添加了一个小块,以便使用 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.phtmlmediaforge_product.phtml 非常简单,所以我不会费心包含它们。

有什么想法吗?

【问题讨论】:

    标签: caching layout magento


    【解决方案1】:

    简而言之,你需要为你的方块定义一个缓存键,这意味着你需要使用 Mage_Core_Block_Template 以外的东西。当您创建自己的块时,将其添加到构造函数中:

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

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

    希望有帮助!

    谢谢, 乔

    【讨论】:

    • 感谢您的回复,乔。不幸的是,这并没有奏效。我认为,问题归结于页脚默认被缓存的事实,因此无论我如何在块上设置缓存设置,页脚内部的任何内容也会被缓存。我最终做的是编写一个自定义页脚类,该类覆盖 _construct 函数并且不设置 cache_lifetime 或 cache_tags 数据值。这听起来像是处理它的正确方法吗?似乎奏效了……
    • 这听起来不像是这样做的方法,但最终如果它有效,那才是最重要的。或者,您可以将缓存生命周期设置为零或类似的值并尝试这样做。只要它有效,这就是正确的解决方案。
    • 这让我感到害怕...我不是 Magento 专家。在过去的几个月里我学到了很多东西,但是如果禁用页脚缓存最终不是一个好主意,那么这会产生什么不利影响?我宁愿以正确的方式做这件事,但要么它不起作用,要么我没有做正确的事情。 Magento 中的大多数缓存页面使用 cache_lifetimecache_tags。只有少数人使用 cache_key。我找不到任何关于这些含义以及我应该为它们使用什么的信息。我想我会暂时离开它,但任何其他信息将不胜感激。
    • This wiki 解释了lifetimetagskey的含义。也许最好的方法是编写一个页脚后代(您已经正确完成了)并将其设置为唯一标识每页页脚的内容,例如 URL。
    • 那个wiki没有解释任何东西。有一些示例,但它没有告诉您 cache_tags 的有效值是什么,或者为什么它们突然在第二个示例中包含 cache_key。但无论如何,它正在工作,所以我很高兴:)
    猜你喜欢
    • 2011-05-22
    • 2021-10-03
    • 2018-10-28
    • 1970-01-01
    • 2014-05-29
    • 2011-07-09
    • 1970-01-01
    相关资源
    最近更新 更多