我在catalog / navigation / vert_nav.phtml中尝试了以下两种方法来添加或禁止特定于主页的内容:
if($this->getUrl('') == $this->getUrl('*/*/*',array('_current'=>true,'_use_rewrite'=>true))):
要么
if( Mage::getSingleton('cms/page')->getIdentifier() == 'home' && Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms' ) :
两者都工作正常,但是当BLOCK_HTML缓存打开时,它首先工作,然后一段时间后主页开始显示仅用于其他页面的内容(在我使用较低的else子句之后).当我关闭BLOCK_HTML时,它的行为与预期的一样.
有趣的是,我在page / html / head.phtml(对于主页特定的javascript / css)和page / html / header.phtml中使用相同的代码(第一个)(对于应该只出现在页面/ html / header.phtml中的标题横幅)主页),即使BLOCK_HTML为ON,这些工作也很好.
(Magento 1.4.1.1)
以上答案是最佳解决方案.
你可以简单地复制app / code / core / Mage / Catalog / Block / Nagivation.PHP
至:
应用程序/代码/本地/法师/目录/座/ Nagivation.PHP
然后如上所述更改getCacheKeyInfo()方法.
/** * Get Key pieces for caching block content * * @return array */ public function getCacheKeyInfo() { $shortCacheId = array( 'CATALOG_NAVIGATION',Mage::app()->getStore()->getId(),Mage::getDesign()->getPackageName(),Mage::getDesign()->getTheme('template'),Mage::getSingleton('customer/session')->getCustomerGroupId(),'template' => $this->getTemplate(),'name' => $this->getNameInLayout(),$this->getCurrenCategoryKey(),// Your logic to make home/none home have different cache keys Mage::getSingleton('cms/page')->getIdentifier() == 'home' ? '1' : '0' ); $cacheId = $shortCacheId; $shortCacheId = array_values($shortCacheId); $shortCacheId = implode('|',$shortCacheId); $shortCacheId = md5($shortCacheId); $cacheId['category_path'] = $this->getCurrenCategoryKey(); $cacheId['short_cache_id'] = $shortCacheId; return $cacheId; }