Magento 2 - ลำดับชั้นเต็มเกล็ดขนมปังผลิตภัณฑ์ที่ชาญฉลาด


9

หากฉันเปิดผลิตภัณฑ์โดยตรงจากหน้าแรกหรือหน้าค้นหาจากนั้นแสดงเส้นทางแบบนี้:

หน้าแรก> MyProduct

โดยที่ถ้าฉันไปที่หมวดหมู่จากนั้นหมวดหมู่ย่อยและจากนั้นเปิดผลิตภัณฑ์มันแสดง Breadcrumb ดังนี้:

หน้าแรก> หมวดหมู่ 1> หมวดหมู่ 2> MyProduct

ฉันต้องทำให้ breadcrumb มีลำดับชั้นเต็มที่ไม่ว่าฉันจะไปที่หน้าผลิตภัณฑ์หรือไม่

โปรดช่วยฉันทำสิ่งนี้ให้สำเร็จ


เกิดอะไรขึ้นถ้าผลิตภัณฑ์ได้รับมอบหมายในหมวดหมู่ย่อย 2 หมวดขึ้นไปในระดับเดียวกัน
Mohit Kumar Arora

ยังควรมีวิธี :)
Magedev2301

คำตอบ:


10

ก่อนอื่นคุณต้องเพิ่มบล็อกในโมดูลของคุณ

เส้นทาง: app\code\Vendor\Module\Block\Crumbblock.php

<?php
namespace Vendor\Module\Block;

use Magento\Catalog\Helper\Data;
use Magento\Framework\View\Element\Template\Context;
use Magento\Store\Model\Store;
use Magento\Framework\Registry;

class Crumbblock extends \Magento\Framework\View\Element\Template
{

    /**
     * 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;
    }
}

หลังจากนั้นเพิ่มเลย์เอาต์ไฟล์catalog_product_view.xmlในโมดูลพา ธ ของคุณควรเป็น:app\code\Vendor\Module\view\frontend\layout\catalog_product_view.xml

<?xml version="1.0"?>
<page>
    <body>
    <referenceBlock name="breadcrumbs" remove="true" />
    <referenceContainer name="page.top">
        <block class="Vendor\Module\Block\Crumbblock" name="crumbs" as="crumbs" template="Vendor_Module::crumbs.phtml" />
    </referenceContainer>
    </body>
</page>

หลังจากนั้นเพิ่มไฟล์ phtml ในโมดูล Path ของคุณควรเป็นดังนี้: app\code\Vendor\Module\view\frontend\templates\crumbs.phtml

<?php $crumbs = $block->getCrumbs(); ?>
<?php if ($crumbs && is_array($crumbs)) : ?>
<div class="container">
    <div class="breadcrumbs">
        <ul class="items">
            <?php
            foreach ($crumbs as $crumbName => $crumbInfo) : ?>
                <li class="item <?php echo $crumbName == 0 ? "home" : ""; ?>">
                    <?php if ($crumbInfo['link']) : ?>
                        <a href="<?= /* @escapeNotVerified */
                        $crumbInfo['link'] ?>" title="<?= $block->escapeHtml($crumbInfo['title']) ?>">
                            <?= $block->escapeHtml($crumbInfo['label']) ?>
                        </a>
                    <?php else: ?>
                        <strong><?= $block->escapeHtml($crumbInfo['label']) ?></strong>
                    <?php endif; ?>
                </li>
            <?php
            endforeach; ?>
        </ul>
    </div>
</div>
<?php endif; ?>

ฉันหวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.