1

启用缓存时,我在使用 Magento 时遇到此问题...

问题:

在页脚中使用以下内容,我可以获得当前的 CMS 页面标题:

$this->getLayout()->getBlock('head')->getTitle();

^^ 我已经使用此方法和其他方法在页脚中获取当前 URL 并遇到相同的症状。关闭缓存后,当前页面没有问题,但缓存后将获得例如商店的页面标题,然后访问其他页面显示它仍然是商店。

这是启用缓存的问题场景:

  1. 访问主页 ( http://devtest.eboost.com/ )。

  2. 导航到博客并滚动到底部,以便您可以看到页脚。Powders、Shots 和一些来自 Company 的超链接在主页和所有其他页面上应该不同。它在缓存关闭的情况下表现得很好。链接在 header.phtml 中工作正常,并且具有相同的逻辑。

事情是启用了缓存,它在 header.phtml 文件中的行为不是这样,所以我很困惑。我是否需要做一些特别的事情,或者以某种方式将 footer.phtml 从缓存监控中取出?我不认为从缓存监控中删除它是明智的,因为我们的大部分 JavaScript 都在本文档中。

我不确定该怎么做,并且非常有压力要弄清楚这一点以使我们客户的网站上线。

4

2 回答 2

2

更新:@benmarks 的答案更好。用那个。

尝试从缓存中删除页脚。试试这个 - http://ken.edmonds-commerce.co.uk/magento/disable-footer-block-caching-in-magento/

于 2013-02-25T11:37:02.467 回答
2

应用程序假定页脚块不是动态的,因此它被永久缓存。虽然这对核心团队来说是一个值得商榷的决定,但您有两个选择:禁用缓存或更改缓存键以合并动态参数。两者都可以通过类重写或布局 XML 来完成:

block_html缓存有三个“设置”:

  • null= 从不缓存
  • false= 永久缓存
  • int= 缓存这么多秒

在其构造函数中,Mage_Page_Block_Html_Footer将其cache_lifetime属性设置为false- 因此它的“永久缓存”行为。因为这个属性可以通过魔法setCacheLifetime()方法公开访问,所以可以从布局 XML 中设置它的值。不幸的是,没有办法将null布局 XML 中的值作为字符串传递,但是,可以通过帮助程序传递值。因此,返回的辅助方法null应该可以工作。有一些核心助手可以做到这一点;示例用法如下(可以放置在您可能需要创建的自定义主题的local.xml中):

<?xml version="1.0" encoding="UTF-8"?>
<layout>
    <default>
        <action method="setCacheLifetime" block="footer">
            <value helper="usa/convertMeasureWeight">
                <x>0</x>
                <x>0</x>
                <x>0</x>
            </value>
            <!--
                i.e.
                Mage_Page_Block_Html_Footer->setCacheLifetime(
                    Mage_Usa_Helper_Data::convertMeasureWeight(0,0,0)
                );
            -->
        </action>
    </default>
</layout>

那应该行得通。但是,这感觉有点老套,因此您可以创建自己的帮助类,只需简单地定义一个方法来返回null,以明确设置此值的目的。

于 2013-02-25T16:46:49.177 回答