Magento2: breadcrumbs หายไปจากหน้าผลิตภัณฑ์หลังจากอัปเกรดเป็น 2.2.4


19

ฉันอัพเกรด Magento เป็น 2.2.4 และตอนนี้ฉันไม่มี breadcrumbs ในหน้าผลิตภัณฑ์ พวกเขาปรากฏในหน้าอื่น ๆ แต่ไม่ได้อยู่ในผลิตภัณฑ์ ฉันตรวจสอบแหล่งที่มา & สังเกตว่ามี div ด้วยคลาส 'breadcrumbs' & parson json บางส่วน แต่ว่างเปล่า (ไม่มีข้อผิดพลาดบนคอนโซล)

ความคิดใด ๆ


UPDATE:
ฉันพบว่าด้วยเหตุผลที่ฉันไม่สามารถอธิบายได้วีโอไอพีเริ่มสร้างส่วนย่อยของหน้าผลิตภัณฑ์ตามการนำทางเมนูด้านบนโดยใช้ JS และเนื่องจากในกรณีของฉันฉันเปลี่ยนเมนูและใช้ตัวเลือก CSS ที่แตกต่างกันมันหยุด การทำงาน
ฉันเชื่อว่าตอนนี้ฉันจะสามารถแก้ไขได้ แต่ฉันไม่เห็นเหตุผลที่ดีที่พวกเขาจะทำเช่นนั้นมันช่างเปราะบางเกินไป ...


วิธีแก้ปัญหาชั่วคราวของฉัน (ถ้าช่วยคน ... ):

1. สร้างโมดูล & เพิ่มบล็อกที่ขยาย \ Magento \ Theme \ Block \ Html \ Breadcrumbs เพื่อเพิ่มเมธอด getCrumbs () * ไม่จำเป็นต้องใช้ di.xml

namespace Vendor\Module\Block\Html;

class Breadcrumbs extends \Magento\Theme\Block\Html\Breadcrumbs
{
    public function getCrumbs()
    {
        return $this->_crumbs;
    }

    public function getBaseUrl()
    {
        return $this->_storeManager->getStore()->getBaseUrl();
    }
}

2. แทนที่เทมเพลต breadcrumbs ในหน้าผลิตภัณฑ์ (แอพ / ออกแบบ / ส่วนหน้า / ผู้ขาย / ธีม / Magento_Catalog / เทมเพลต / ผลิตภัณฑ์ / breadcrumbs.phtml)

<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$catalogData = $objectManager->create('Magento\Catalog\Helper\Data');
$crumbs = false;
if ($breadcrumbsBlock = $objectManager->create('Vendor\Module\Block\Html\Breadcrumbs')) {
    $breadcrumbsBlock->addCrumb(
        'home',
        [
            'label' => __('Home'),
            'title' => __('Go to Home Page'),
            'link' => $breadcrumbsBlock->getBaseUrl()
        ]
    );
    $path = $catalogData->getBreadcrumbPath();
    foreach ((array)$path as $name => $breadcrumb) {
        $breadcrumbsBlock->addCrumb($name, $breadcrumb);
    }
    $crumbs = $breadcrumbsBlock->getCrumbs();
}
?>
<?php if ($crumbs && is_array($crumbs)) : ?>
    <div class="breadcrumbs">
        <ul class="items">
            <?php foreach ($crumbs as $crumbName => $crumbInfo) : ?>
                <li class="item <?= /* @escapeNotVerified */ $crumbName ?>">
                <?php if ($crumbInfo['link']) : ?>
                    <a href="<?= /* @escapeNotVerified */ $crumbInfo['link'] ?>" title="<?= $block->escapeHtml($crumbInfo['title']) ?>"><?= $block->escapeHtml($crumbInfo['label']) ?></a>
                <?php elseif ($crumbInfo['last']) : ?>
                    <strong><?= $block->escapeHtml($crumbInfo['label']) ?></strong>
                <?php else: ?>
                    <?= $block->escapeHtml($crumbInfo['label']) ?>
                <?php endif; ?>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
<?php endif; ?>

โปรดล้างโฟลเดอร์ var ของคุณจากนั้นเรียกใช้ bin / magento set: up
hweb87

& นอกเหนือจากนั้น? (ฉันได้ลองทุกสิ่งปกติ)
Pini

@Pini นี่ใช้งานได้ดี
Arvind07

ฉันยังประสบปัญหาเดียวกันหลังจากอัพเกรด 2.2.5 ....
Mano M

Works! ปัญหาเล็ก ๆ ที่ $ crumbInfo ไม่ได้ส่งคืนข้อมูลเกี่ยวกับครั้งแรก / ครั้งสุดท้ายดังนั้นฉันต้องเพิ่มตัวเอง
Volvox

คำตอบ:


13

ฉันพบปัญหาเดียวกันและทำให้มันง่ายขึ้นเล็กน้อยและไม่มี ObjectManager ฉันค้นพบวิธีการใช้งานหมวดหมู่และใช้สิ่งนั้น ในcatalog_product_view.xmlฉันเขียนแม่แบบกลับไปที่ Magento_Theme

<referenceBlock name="breadcrumbs" template="Magento_Theme::html/breadcrumbs.phtml" />

จากนั้นฉันเขียนปลั๊กอินขนาดเล็ก:

namespace Vendor\Module\Plugin\Catalog\Block\Product;

class View
{

    /**
     * Add Breadcrumbs Block
     *
     * @param \Magento\Catalog\Block\Product\View $subject
     * @param $result
     * @return mixed
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function afterSetLayout(\Magento\Catalog\Block\Product\View $subject, $result) {
        $subject->getLayout()->createBlock(\Magento\Catalog\Block\Breadcrumbs::class);

        return $result;
    }
}

ในที่สุดdi.xml:

<type name="Magento\Catalog\Block\Product\View">
    <plugin name="add_catalog_breadcrumb_block" type="Vendor\Module\Plugin\Catalog\Block\Product\View" />
</type>

แก้ไขปัญหาสองข้อแล้ว: breadcrumbs หายไปและชื่อหน้าขาดหายไป (ในส่วนหัว) ในหน้าผลิตภัณฑ์


ทำได้ดีนี่! จริง ๆ แล้วฉันหวังว่า Magento จะให้การแก้ไขอย่างเป็นทางการ (เท่าที่ฉันสามารถบอกได้ - มันเป็นข้อผิดพลาด) ดังนั้นฉันจึงพยายามอยู่ในพื้นที่ธีมให้มากที่สุด แต่สิ่งนี้จะทำ & มันจะง่ายต่อการเปลี่ยนโซลูชันของคุณเป็นโมดูลที่แก้ไขปัญหานั้น
Pini

ฉันยังเผชิญปัญหาเดียวกัน ... วิธีแก้ปัญหานี้ใน magento2.2.5
Mano M

ดี ใช้งานได้กับ Magento 2.2.5 ขอบคุณ
MGento

ฉันจะใส่รหัสสำหรับ "ปลั๊กอินขนาดเล็ก" ที่ไหน?
jogoe

6

สำหรับผู้ที่ต้องการแก้ไขโมดูลจนวีโอไอพีแก้ไขสิ่งนี้:

https://github.com/CompactCodeEU/FixProductBreadcrumbs.git

ฉันสร้างสิ่งนี้เพื่อเพิ่มบ้านและผลิตภัณฑ์ลงในเกล็ดขนมปัง นอกจากนี้ยังป้องกันการเรียกใช้ JS เนื่องจากฉันแทนที่ด้วย html เริ่มต้น


5

สองบรรทัดนี้คืนค่าบล็อก breadcrumb ของชั้นเรียน แค่นั้นแหละ. ไม่มีปลั๊กอินที่กำหนดเองหรืออย่างอื่น:

<referenceBlock name="breadcrumbs" template="Magento_Theme::html/breadcrumbs.phtml" />
<block class="Magento\Catalog\Block\Breadcrumbs" />

1

สำหรับทุกคนที่มาที่นี่และอาจไม่ต้องการติดตั้งปลั๊กอินสำหรับสิ่งนี้สิ่งที่ฉันต้องทำคือเพิ่มสิ่งนี้ลงในเทมเพลตของฉัน (มันซ่อนอยู่ทั้งหมด) และ breadcrumbs ก็เริ่มปรากฏขึ้นอีกครั้ง:

<div data-action="navigation" style="display:none;"><ul  data-mage-init='{"menu":{"responsive":false, "expanded":true, "delay":0, "position":{"my":"left top","at":"left bottom"}}}'></ul></div>

นี่เป็นเรื่องจริง แต่ดูเหมือนจะไม่เป็นไปตามโครงสร้างเศษเล็กเศษน้อยที่ถูกต้อง หน้าผลิตภัณฑ์ของฉัน breadcrumbs แสดงหน้าแรก> ชื่อผลิตภัณฑ์ ไม่มีการกล่าวถึงประเภทที่เป็นของมัน
Digital_Frankenstein
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.