php – 检测Magento .phtml中的主页,该主页将启用BLOCK_HTML缓存
我在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; } 这将使主页/非主页页面的缓存键不同,这将缓存两个副本,而不是缓存单个模板副本以在所有页面上使用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |