我试图在目录/导航以下两种方法/ 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,其行为与预期相同。
有趣的是我用在页面相同的代码(一日一)/ HTML / head.phtml(产品页面的JavaScript特定/ CSS),并在页面/ HTML / header.phtml(头球横幅,应该只出现在主页),而这些做工精细,即使BLOCK_HTML为ON。
(1.4.1.1 Magento的)
上面的回答是最好的解决办法。
你可以简单地复制应用程序/代码/核心/法师/目录/座/ 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;
}
这将使缓存网页型/无主页页面键不同,这将缓存两个副本,而不是缓存一个模板拷贝所有网页上使用。
这里有你想要阅读有关区块HTML缓存来源:
- Magento的论坛
- 一些博客
- inchoo博客
这将是表现最好不要完全禁用块,而是指定一个巧妙的方法缓存键。 因此,这里是你应该做的:
- 首先 - 指定您的一个.phtml文件的自定义块。 如果你不知道什么是座,或如何将块分配给一个模板文件, 这里的参考阿兰风暴博客。
第二 - 你将有一个代码添加到模块的构造函数:
$this->addData(array( 'cache_lifetime' => 3600, 'cache_tags' => array(Mage_Cms_Model_Block::CACHE_TAG), 'cache_key' => $this->getCacheKey(), ));
正如你看到的,我这里使用的getCacheKey
从抽象类的方法Mage_Core_Block_Abstract
。
现在,您需要确保cache_key适用于你的逻辑。 该Mage_Core_Block_Abstract::getCacheKey
采用其它方法,它实际上应该指定我们的块中的独特价值- getCacheKeyInfo
。 你需要用你的逻辑重新定义它:
public function getCacheKeyInfo() { $isHomepage = 0; if (Mage::getSingleton('cms/page')->getIdentifier() == 'home') { $isHomepage = 1; } return array( $this->getNameInLayout(), $isHomepage, ); }
现在,你可以肯定的是对首页缓存键将从缓存键不同,所有其他您的网页,你的缓存会返回有效的信息。
我想补充到这些答案提示检查当前页面标识等同于“家”。
这将是绝对安全的可进行对比的Mage::getStoreConfig('web/default/cms_home_page')
来代替。
我们用
<!-- SNH CUSTOM -->
$route = Mage::app()->getFrontController()->getRequest()->getRouteName();
$action = Mage::app()->getFrontController()->getRequest()->getActionName();
if($route == 'cms' && $action == 'index'):
<div class="grid_12">
echo $this->getChildHtml('shopper_footer_partners');
</div>
endif;
真的是最好的办法是:
1更新您的布局XML(local.xml中或主题custom.xml)
<!-- CUSTOM: ADD NEW FOOTER BLOCK AT BOTTOM FOR PARTNERS -->
<cms_index_index>
<reference name="footer">
<block type="cms/block" name="footer_block_extra">
<action method="setBlockId"><block_id>footer_block_extra</block_id></action>
</block>
</reference>
</cms_index_index>
和步骤2中添加此代码,你想要在你的模板PHTML块(通常/page/html/footer.phtml)
<!-- SNH CUSTOM -->
<div class="grid_12">
<?php echo $this->getBlockHtml('footer_block_extra'); ?>
</div>
和第3步中与ID“footer_block_extra”后端创建一个新的CMS块......并添加内容。
文章来源: Detect home page in Magento .phtml that will work with BLOCK_HTML cache enabled