2

在我的 Magento 网站的主页上,我使用以下代码添加了最新产品块

{{block type="catalog/product_list" category_id="2" template="catalog/product/random.phtml"}}

单击最新产品时,有些会起作用(起作用的会显示完整的面包屑),而另一些会导致错误:致命错误:在 /var/www/ 中的非对象上调用成员函数 getName()第 80 行的 vhosts/riderseyewear.net/httpdocs/app/design/frontend/fortium/default/template/page/1column-product.phtml

该错误在这里有更多描述http://i.imgur.com/RrG3ixU.png

在那个 1column-product.phtml 文件中,我转到第 80 行并更改了

$currentcat = Mage::registry('current_category')->getName();

$currentcat = Mage::registry('current_product')->getName();

更改此行删除了错误。但是,现在单击产品时,类别名称不会显示在面包屑中。面包屑显示 HOME/PRODUCT_NAME 而不是 HOME/CATEGORY_NAME/PRODUCT_NAME

如何在没有收到致命错误的情况下显示完整的面包屑?

4

2 回答 2

4

按照此链接http://dltr.org/blog/magento/381/Magento-Force-Display-Full-Breadcrumb-Path。非常适合我。让我知道我是否可以为您提供更多帮助。

于 2013-07-17T18:33:48.237 回答
0

我知道这已经很老了,但我还是想分享我的解决方案,因为它不会覆盖/克隆任何核心文件。

  1. 在您的自定义模块中,将以下内容添加到您的config.xml

    <config>
        ...
        <frontend>
            <events>
                <catalog_controller_product_init>
                    <observers>
                        <breadcrumb_categorypath_product_init>
                            <type>singleton</type>
                            <class><Your Namespace>_<Your Module>_Model_Observer</class>
                            <method>fullBreadcrumbCategoryPath</method>
                        </breadcrumb_categorypath_product_init>
                    </observers>
                </catalog_controller_product_init>
            </events>
        </frontend>
    </config>
    
  2. 创建一个Observer.php输入/app/code/local/<Your Namespace>/<Your Module>/Model/

  3. 将以下内容添加到您的Observer.php:

    class <Your Namespace>_<Your Module>_Model_Observer {
        public function fullBreadcrumbCategoryPath(Varien_Event_Observer $observer) {
            $currentProduct = Mage::registry( 'current_product' );
            $storeRootCatId     = Mage::app()->getStore()->getRootCategoryId();
    
            if( $currentProduct ) {
                $categories = $currentProduct->getCategoryCollection()->addAttributeToSelect( 'name' );
                foreach( $categories as $_category ) {
                    $catIdPath = '1/' . $storeRootCatId . '/';
                    if( 0 === strpos($_category->getData('path'), $catIdPath) ) {
                        Mage::unregister( 'current_category' );
                        Mage::register( 'current_category', $_category );
                    }
                }
            }
        }
    }
    
  4. 你应该很高兴。

于 2015-05-12T12:24:35.347 回答