Magento CE 1.7.0.2 - 仅在footer.phtml上启用缓存时才会出现问题

时间:2013-02-25 00:33:59

标签: php magento magento-1.7

启用缓存后,我遇到了Magento的这个问题...

问题:

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

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

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

以下是启用缓存的问题场景:

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

  2. 导航到博客并滚动到底部,以便您可以看到页脚。粉末,镜头和公司的一些超链接在主页和所有其他页面上应该是不同的。缓存时它表现得很好。这些链接在header.phtml中运行良好,具有相同的逻辑。

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

    我不知道该怎么做,并且非常有压力去解决这个问题,以便让我们客户的网站上线。

2 个答案:

答案 0 :(得分:2)

更新:@benmarks的答案好几英里。使用它。

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

答案 1 :(得分:2)

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

block_html缓存有三个“设置”:

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

在其构造函数中,Mage_Page_Block_Html_Footer将其cache_lifetime属性设置为false - 因此其“永久缓存”行为。由于此属性可通过magic 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>

那应该有用。但是,这感觉有点hackish,因此您可以创建自己的帮助程序类,只需定义一个方法来返回null,以明确设置此值。