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::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(
			'title'=>Mage::helper('catalog')->__('Go to Home Page'),
		// 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::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

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.


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()) {
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

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

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

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!



QR Code: Magento - Force Display Full Breadcrumb Path