Magento - Force Display Full Breadcrumb Path

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

 

UPDATE: This was previous method that I used to force display full breadcrumbs for all product pages. Scroll to the bottom of the article to find new method which you can download from github as well.

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();
}

I have now created new module based on Chris's suggestion here

- https://github.com/dbashyal/Magento_Breadcrumbs

Now you can request any update pull request directly in github :)

  •  
      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

Works great in Magento 1.7.0.2!

One small problem though: the script does not distinguish between disabled categories.

When a product is inside a disabled category AND another category which is enabled, the script might choose the disabled category (if it is first). On frontend there will be one breadcrumb missing (because that category is disabled).

Can the script be edited so it skips the disabled category and chooses the first enabled category?

01/06/15 05:04:44| Pc

 

 





Javascript must be enabled to post comment!
TAGS:Magento

 

 

QR Code: Magento - Force Display Full Breadcrumb Path