Magento - Force Display Full Breadcrumb Path

2013-04-17 02:47:18Damodar Bashyal

 

Today's another issue with magento: not displaying full breadcrumb i.e. categories not included in path. I'm not overriding this time as very little time was assigned to fix this.

copy core file to local: app\code\local\Mage\Catalog\Block\Breadcrumbs.php

On "protected function _prepareLayout()" add below code just before "$title = array();"

$current_category   = Mage::registry('current_category');
$current_product    = Mage::registry('current_product');
if(!$current_category && $current_product){
	$categories = $current_product->getCategoryCollection()->addAttributeToSelect('name')->setPageSize(1);
	foreach($categories as $category) {
		Mage::unregister('current_category');
		Mage::register('current_category', $category);
	}
}

After this addition of code, you will always get full magento breadcrumb.

Full code looks like this:

/**
 * Preparing layout
 *
 * @return Mage_Catalog_Block_Breadcrumbs
 */
protected function _prepareLayout()
{
	if ($breadcrumbsBlock = $this->getLayout()->getBlock('breadcrumbs')) {
		$breadcrumbsBlock->addCrumb('home', array(
			'label'=>Mage::helper('catalog')->__('Home'),
			'title'=>Mage::helper('catalog')->__('Go to Home Page'),
			'link'=>Mage::getBaseUrl()
		));
		// sometimes magento can't get category associated with a product
		// so the full breadcrumb is not shown
		// this is a hack to fix the issue.
		$current_category   = Mage::registry('current_category');
		$current_product    = Mage::registry('current_product');
		// let's check if magento knows what current category is
		// if it doesn't know, let's feed this info to it's brain :)
		if(!$current_category && $current_product){
			$categories = $current_product->getCategoryCollection()->addAttributeToSelect('name')->setPageSize(1);
			foreach($categories as $category) {
				Mage::unregister('current_category');
				Mage::register('current_category', $category);
			}
		}
		$title = array();
		$path  = Mage::helper('catalog')->getBreadcrumbPath();
		foreach ($path as $name => $breadcrumb) {
			$breadcrumbsBlock->addCrumb($name, $breadcrumb);
			$title[] = $breadcrumb['label'];
		}
		if ($headBlock = $this->getLayout()->getBlock('head')) {
			$headBlock->setTitle(join($this->getTitleSeparator(), array_reverse($title)));
		}
	}
	return parent::_prepareLayout();
}
  •  
      Tips: touching links in iPhone for few seconds gives the options to open a link in new window.
     

 


Bookmark and Share

Great stuff, this worked a treat for me on 1.7.02...thanks!

11/11/13 04:15:39| Nick Annies

thx great useful stuff work for me -> magento 1.7.0.2

15/04/14 01:16:15| nof8ole

Thank you very much!
Works fine on magento 1.8.1

29/05/14 02:13:35| mad

I have a product A and it is assigned to 3 categories

Shirts >> full sleeves >> product A
T-Shirts >> Polo >> product A
Sweaters >> Woolen >> product A

However when I access that product is shows the breadcrumbs of category sweaters.

How do I make it always take the category of shirts?

18/08/14 01:16:01| surao

This should be implemented as an observer rather than a rewrite or core hack.

<frontend>
<events>
<catalog_controller_product_init_after>
<observers>
<add_category_breadcrumb>
<class>custom_module/observer</class>
<method>addCategoryBreadcrumb</method>
</add_category_breadcrumb>
</observers>
</catalog_controller_product_init_after>
</events>
</frontend>


&lt;?php
class Custom_Module_Model_Observer
{
/**
* Adds category to breadcrumb for product views
* originating from outside a category, for instance
* homepage or navigation links.
*
* @return Custom_Module_Model_Observer
*/
public function addCategoryBreadcrumb(Varien_Event_Observer $observer)
{
if (!Mage::registry('current_category')) {
$product = $observer->getProduct();
$categoryIds = $product->getCategoryIds();

if(count($categoryIds)) {
$firstCategoryId = reset($categoryIds);
$category = Mage::getModel('catalog/category')->load($firstCategoryId);

if ($category->getId()) {
$product->setCategory($category);
Mage::register('current_category', $category);
}
}
}

return $this;
}
}

27/08/14 10:05:03| Chris Pook

That's awesome @ChrisPook.

27/08/14 10:07:01| Damodar Bashyal

thank you, works great :-)

31/08/14 03:04:02| Harry

worked great for me, thanks! Magento 1.7.0.2

20/11/14 04:53:58| Jeff

As a newbie, this was magic to me !!! Worked great on first attempt!

Magento1.9
Thanks for that!

10/11/14 05:38:13| Enrique

Thanks works fine on my magento

11/11/13 04:12:37| Pricio

 

 





Javascript must be enabled to post comment!
TAGS:Magento

 

 

QR Code: Magento - Force Display Full Breadcrumb Path