在我的Magento网站的主页上,我使用以下代码添加最新产品块
{{block type="catalog/product_list" category_id="2" template="catalog/product/random.phtml"}}
点击最新产品时,有些可以使用(有效的那些显示完整的面包屑),而其他产品会导致错误: 致命错误:在/var/www/vhosts/riderseyewear.net/httpdocs/app/design/frontend/fortium/default/template/page/1column-product.phtml上的非对象上调用成员函数getName()第80行
此处更详细地描述了错误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
如何在没有收到致命错误的情况下显示完整的痕迹?
答案 0 :(得分:4)
请点击此链接http://dltr.org/blog/magento/381/Magento-Force-Display-Full-Breadcrumb-Path。 完美适合我。如果我可以帮助你,请告诉我。
答案 1 :(得分:0)
我知道这已经很老了,但我还是想分享我的解决方案,因为它不会覆盖/克隆任何核心文件。
在自定义模块中,将以下内容添加到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>
在Observer.php
/app/code/local/<Your Namespace>/<Your Module>/Model/
将以下内容添加到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 );
}
}
}
}
}
你应该好好去。