检测主页在Magento一个.phtml,将与BLOCK_HTML缓存的工作原理启用(Detect

2019-07-31 13:18发布

我试图在目录/导航以下两种方法/ 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的)

Answer 1:

上面的回答是最好的解决办法。

你可以简单地复制应用程序/代码/核心/法师/目录/座/ 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;
}

这将使缓存网页型/无主页页面键不同,这将缓存两个副本,而不是缓存一个模板拷贝所有网页上使用。



Answer 2:

这里有你想要阅读有关区块HTML缓存来源:

  1. Magento的论坛
  2. 一些博客
  3. inchoo博客

这将是表现最好不要完全禁用块,而是指定一个巧妙的方法缓存键。 因此,这里是你应该做的:

  1. 首先 - 指定您的一个.phtml文件的自定义块。 如果你不知道什么是座,或如何将块分配给一个模板文件, 这里的参考阿兰风暴博客。
  2. 第二 - 你将有一个代码添加到模块的构造函数:

     $this->addData(array( 'cache_lifetime' => 3600, 'cache_tags' => array(Mage_Cms_Model_Block::CACHE_TAG), 'cache_key' => $this->getCacheKey(), )); 

    正如你看到的,我这里使用的getCacheKey从抽象类的方法Mage_Core_Block_Abstract

  3. 现在,您需要确保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, ); } 

    现在,你可以肯定的是对首页缓存键将从缓存键不同,所有其他您的网页,你的缓存会返回有效的信息。



Answer 3:

我想补充到这些答案提示检查当前页面标识等同于“家”。

这将是绝对安全的可进行对比的Mage::getStoreConfig('web/default/cms_home_page')来代替。



Answer 4:

我们用

<!-- 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;


Answer 5:

真的是最好的办法是:

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