M2 2.2.4和2.2.5里产品页面不显示面包屑导航,无内容

管理员组 admin 2018-8-20 962


这应该是2.2.4的一个bug,或者说可能是主题或者其他插件影响了。


不过不要紧,我们能解决。


两步搞定。


1,xml里删除旧breadcrumbs,添加自定义的breadcrumbs

vim 主题路径/Magento_Catalog/catalog_product_view.xml
<referenceBlock name="breadcrumbs" remove="true" />         
<referenceContainer name="page.top">            
    <block class="Magiccart\Alothemes\Block\Evercrumbs" name="oriarm-breadcrumbs" as="oriarm-breadcrumbs" after="-"/>         
</referenceContainer>



2,编写block代码

vim 插件路径/Block/Evercrumbs.php
<?php 
namespace Magiccart\Alothemes\Block; 
use Magento\Catalog\Helper\Data; 
use Magento\Framework\View\Element\Template\Context; 
use Magento\Store\Model\Store; 
use Magento\Framework\Registry; 
class Evercrumbs extends \Magento\Framework\View\Element\Template { 
    protected $_template = 'Magento_Theme::html/breadcrumbs.phtml';     
    /**      * Catalog data      
    *      * @var Data      
    */     
    protected $_catalogData = null;     
    /**      
    * @param Context $context      
    * @param Data $catalogData      
    * @param array $data      
    */     
    public function __construct( Context $context,  Data $catalogData,  Registry $registry, array $data = [])     {         
        $this->_catalogData = $catalogData; 
        $this->registry = $registry;         
        parent::__construct($context, $data);     
    } 
    public function getCrumbs()     { 
        $evercrumbs = array(); 
        $evercrumbs[] = array( 
            'label' => 'Home', 
            'title' => 'Go to Home Page', 
            'link' => $this->_storeManager->getStore()->getBaseUrl() 
        ); 
        $path = $this->_catalogData->getBreadcrumbPath(); 
        $product = $this->registry->registry('current_product'); 
        $categoryCollection = clone $product->getCategoryCollection(); 
        $categoryCollection->clear(); 
        $categoryCollection->addAttributeToSort('level', $categoryCollection::SORT_ORDER_DESC)->addAttributeToFilter('path', array('like' => "1/" . $this->_storeManager->getStore()->getRootCategoryId() . "/%")); 
        $categoryCollection->setPageSize(1); 
        $breadcrumbCategories = $categoryCollection->getFirstItem()->getParentCategories(); 
        foreach ($breadcrumbCategories as $category) { 
            $evercrumbs[] = array( 'label' => $category->getName(), 'title' => $category->getName(), 'link' => $category->getUrl() ); 
        } 
        $evercrumbs[] = array( 'label' => $product->getName(), 'title' => $product->getName(), 'link' => '' ); 
        return $evercrumbs;     
    }     
    protected function _toHtml()     {      
        $crumbs = $this->getCrumbs();      
        if (is_array($crumbs)) {             
            reset($crumbs);             
            $crumbs[key($crumbs)]['first'] = true;             
            end($crumbs);             
            $crumbs[key($crumbs)]['last'] = true;         
        }         
        $this->assign('crumbs', $crumbs);         
        return parent::_toHtml();     
    } 
}



3,测试


清缓存测试,不出意外的话 就没问题。

最新回复 (1)
返回
发帖