I have tried the following two methods in catalog/navigation/vert_nav.phtml to add or suppress content specific to the home page:
if($this->getUrl('') == $this->getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true))):
or
if(
Mage::getSingleton('cms/page')->getIdentifier() == 'home' &&
Mage::app()->getFrontController()->getRequest()->getRouteName() == 'cms'
) :
Both work fine, however when BLOCK_HTML cache is turned on, it works at first, then after a while the home page starts displaying content that is intended only for other pages (after an else clause I use lower down). When I turn off the BLOCK_HTML, it behaves as expected.
Interestingly I've used the same code (the 1st one) in page/html/head.phtml (for home page specific javascript/css), and in page/html/header.phtml (for a header banner that should only appear on the home page), and these work fine even when BLOCK_HTML is ON.
(Magento 1.4.1.1)
The above answer is the best solution.
You could simply copy app/code/core/Mage/Catalog/Block/Nagivation.php
to:
app/code/local/Mage/Catalog/Block/Nagivation.php
and then change the getCacheKeyInfo() method as described above.
/**
* 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;
}
This will make the cache key different for homepage / none-homepage pages, which will cache two copies, rather than caching a single template copy for use on all pages.
Here are sources you'd want to read about Block Html cache:
It would be better for performance to not disable the block completely, but rather specify the cache key in a smart way. So here's what you should do:
Second - you will have to add next code to a Block constructor:
$this->addData(array(
'cache_lifetime' => 3600,
'cache_tags' => array(Mage_Cms_Model_Block::CACHE_TAG),
'cache_key' => $this->getCacheKey(),
));
As you see, I used here the getCacheKey
method from the abstract class Mage_Core_Block_Abstract
.
Now you need to make sure the cache_key works for your logic. The Mage_Core_Block_Abstract::getCacheKey
uses other method, which should actually specify the unique values for our block - getCacheKeyInfo
. You need to redefine it using your logic:
public function getCacheKeyInfo()
{
$isHomepage = 0;
if (Mage::getSingleton('cms/page')->getIdentifier() == 'home') {
$isHomepage = 1;
}
return array(
$this->getNameInLayout(),
$isHomepage,
);
}
Now you can be sure that cache key for Home Page will differ from cache key to all other your pages, and your cache will return valid info.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With