如果从Category产品列表中进入Product,则面包屑导航中含有Category Path; 否则,当从首页,或搜索结果中,或者其他什么地方进入,则缺少之。我想,可能是Magento支持一个产品放入多个Category的缘故吧。Magento产品页面包屑导航(Breadcrumb)修正不管怎么样,产品页中缺少了Category Path,用户体验不大好。
修正的方法,找到文件
| app/code/core/Mage/Catalog/Helper/Data.php |
复制一份到local代码池
| view sourceprint?1 app/code/local/Mage/Catalog/Helper/Data.php |
在函数getBreadcrumbPath的开始部分,加多一段代码参照如下的代码逻辑
| public function getBreadcrumbPath() |
| if ( $this ->getProduct() && ! $this ->getCategory()) { |
| $_categoryIds = $this ->getProduct()->getCategoryIds(); |
| if ( $_categoryId = $_categoryIds [0]) { |
| $_category = Mage::getModel( 'catalog/category' )->load( $_categoryId ); |
| Mage::register( 'current_category' , $_category ); |
| if (! $this ->_categoryPath) { |
| if ( $category = $this ->getCategory()) { |
| $pathInStore = $category ->getPathInStore(); |
| $pathIds = array_reverse ( explode ( ',' , $pathInStore )); |
| $categories = $category ->getParentCategories(); |
| // add category path breadcrumb |
| foreach ( $pathIds as $categoryId ) { |
| if (isset( $categories [ $categoryId ]) && $categories [ $categoryId ]->getName()) { |
| $path [ 'category' . $categoryId ] = array ( |
| 'label' => $categories [ $categoryId ]->getName(), |
| 'link' => $this ->_isCategoryLink( $categoryId ) ? $categories [ $categoryId ]->getUrl() : '' |
| if ( $this ->getProduct()) { |
| $path [ 'product' ] = array ( 'label' => $this ->getProduct()->getName()); |
| $this ->_categoryPath = $path ; |
| return $this ->_categoryPath; |