Magento 1.9 – Add Category Path to Breadcrumbs on Product View Page

breadcrumbscatalogsearchmagento-1.9navigationproduct-page

By Default Manual Navigation Products breadcrumb looks like,

Wanted product detail page:

enter image description here


When I reached to product page using by search the breadcrumb looks like,

Current product detail page:

enter image description here

How can I get Complete Breadcrumb of the desired products even reached
by search?

Best Answer

You can try this one ... create an extension with this code:

app/etc/modules/My_Module.xml

<?xml version="1.0"?>
<config>
    <modules>
        <My_Module>
            <active>true</active>
            <codePool>local</codePool>
        </My_Module>
    </modules>
</config>

app/code/local/My/Module/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <My_Module>
            <version>0.0.1</version>
        </My_Module>
    </modules>
    <global>
        <models>
            <my_module>
                <class>My_Module_Model</class>
            </my_module>
        </models>
    </global>
    <frontend>
        <events>
            <catalog_controller_product_view>
                <observers>
                    <add_category_to_breadcrumbs>
                      <class>my_module/observer</class>
                      <method>addCategoryToBreadcrumbs</method>
                    </add_category_to_breadcrumbs>
                </observers>
            </catalog_controller_product_view>
        </events>
    </frontend>
</config>

app/code/local/My/Module/Model/Observer.php

class My_Module_Model_Observer extends Mage_Core_Model_Observer
{
    public function addCategoryToBreadcrumbs(Varien_Event_Observer $observer)
    {
        if (Mage::registry('current_category')) {
            return;
        }

        $product = $observer->getProduct();

        $product->setDoNotUseCategoryId(false);
        $categoryIds = $product->getCategoryIds();

        if (count($categoryIds)) {
            $categories = Mage::getModel('catalog/category')->getCollection()
                ->addAttributeToFilter('entity_id', $categoryIds)
                ->addAttributeToFilter('is_active', 1);

            $categories->getSelect()->order('level DESC')->limit(1);

            Mage::register('current_category', $categories->getFirstItem());
        }
    }
}