检测Magento .phtml中的主页,该主页将与启用BLOCK_HTML缓存一起使用

rwi*_*red 6 php magento magento-1.4

我在catalog/navigation/vert_nav.phtml中尝试了以下两种方法来添加或禁止特定于主页的内容:

if($this->getUrl('') == $this->getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true))):
Run Code Online (Sandbox Code Playgroud)

要么

if(
Mage::getSingleton('cms/page')->getIdentifier() == 'home'  &&
Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms' 
) :
Run Code Online (Sandbox Code Playgroud)

两者都工作正常,但是当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)

And*_*rew 4

上面的答案是最好的解决方案。

您只需复制 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;
}
Run Code Online (Sandbox Code Playgroud)

这将使主页/非主页页面的缓存键不同,这将缓存两个副本,而不是缓存单个模板副本以在所有页面上使用。