缓存启用后,页脚上的Magento CMS阻止功能无法正常工作

时间:2017-02-03 16:14:01

标签: php magento caching magento-1.9

我试图向Magento CMS块显示一个主页页脚区域,我使用下面的代码

$routeName = Mage::app()->getRequest()->getRouteName(); 
$identifier = Mage::getSingleton('cms/page')->getIdentifier();

if($routeName == 'cms' && $identifier == 'home') {
echo $this->getLayout()->createBlock('cms/block')->setBlockId('footer_seo')->toHtml();
} 

当我禁用缓存时,此代码工作正常,但在启用缓存后,它会显示在所有页面上,有时不会显示在任何页面上。

我在堆栈溢出上尝试了一些解决方案,但那些没有用,我的Magento版本是1.9.2.4

任何人都知道如何解决此问题

2 个答案:

答案 0 :(得分:1)

您应该使用布局句柄有条件地将块添加到布局(可能来自您的主题local.xml):

<cms_index_index>
    <reference name="footer">
        <block type="cms/block" name="footer.seo">
            <action method="setBlockId"><value>footer_seo</value></action>
        </block>
    </reference>
</cms_index_index>

如果您没有local.xml,请不要忘记用上面的代码包装

<?xml version="1.0"?>
<layout version="0.1.0">
    ... layout handle code...
</layout>

之后,您所要做的就是在页脚模板中输出您的块:

echo $this->getChildHtml('footer.seo');

这样您就可以避免模板中的黑客检查。

祝你好运。

答案 1 :(得分:0)

我解决了在引用标记内部使用动作标记从页脚中删除遗留物

这看起来像是Magento 1.9版本上的一个已知错误,感谢大家特别帮助我MladenIlić

<reference name="footer">
    <action method="setCacheLifetime"></action>
        <block type="cms/block" name="footer.seo">
            <action method="setBlockId"><value>footer_seo</value></action>
        </block>
    </reference>