Magento2: remah roti menghilang dari halaman produk setelah memutakhirkan ke 2.2.4

19

Saya memutakhirkan Magento ke 2.2.4 & sekarang saya tidak memiliki remah roti pada halaman produk. Mereka muncul di halaman lain tetapi tidak pada produk. Saya memeriksa sumber & memperhatikan bahwa ada div dengan kelas 'breadcrumbs' & beberapa json params, tetapi kosong (tidak ada kesalahan pada konsol).

Ada ide?


UPDATE:
Saya menemukan bahwa karena suatu alasan saya tidak dapat menjelaskan, Magento mulai membangun remah roti dari halaman produk berdasarkan navigasi menu utama menggunakan JS & karena dalam kasus saya saya mengubah menu & menggunakan pemilih CSS yang berbeda, itu berhenti kerja.
Saya percaya bahwa sekarang saya dapat memperbaikinya, tetapi saya tidak dapat melihat alasan yang baik bagi mereka untuk melakukan itu, itu terlalu rapuh ...


Solusi Sementara Saya (Jika itu membantu seseorang ...):

1. Buat modul & tambahkan blok yang memanjang \ Magento \ Tema \ Blok \ Html \ Breadcrumbs untuk menambahkan metode getCrumbs () * Tidak perlu 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. Mengganti template remah roti pada halaman produk (aplikasi / desain / antarmuka / Vendor / Tema / Magento_Catalog / template / produk / 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; ?>
Pini
sumber
hapus folder var Anda lalu jalankan bin / magento set: up.
hweb87
& Selain itu? (Saya sudah mencoba semua hal biasa)
Pini
@Pini Ini berfungsi sempurna.
Arvind07
Saya juga menghadapi masalah yang sama setelah memutakhirkan 2.2.5 ....
Mano M
Bekerja! Hanya masalah kecil yang $ crumbInfo tidak mengembalikan info tentang pertama / terakhir jadi saya harus menambahkan ini sendiri
Volvox

Jawaban:

13

Saya menemukan masalah yang sama dan melakukannya sedikit lebih mudah dan tanpa ObjectManager. Saya menemukan cara melakukannya dengan kategori dan menggunakannya. Pada catalog_product_view.xml, saya menulis ulang template kembali ke template Magento_Theme:

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

Lalu saya menulis plugin kecil:

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

Akhirnya, di.xml:

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

Dua masalah telah diperbaiki: remah roti yang hilang dan judul halaman yang hilang (di bagian kepala) di halaman produk.

Tom adalah
sumber
Yang bagus! Saya benar-benar berharap Magento akan memberikan perbaikan resmi (sebanyak yang saya tahu - ini bug), jadi saya mencoba untuk tetap berada di area tema sebanyak mungkin. Tapi ini akan dilakukan & akan mudah untuk mengubah solusi Anda menjadi modul yang memperbaikinya.
Pini
Saya juga menghadapi masalah yang sama ... Bagaimana mengatasi ini di magento2.2.5
Mano M
Bagus. Ini berfungsi untuk Magento 2.2.5. Terima kasih
MGento
di mana saya meletakkan kode untuk "plugin kecil"?
jogoe
6

Untuk mereka yang menginginkan Modul Perbaikan hingga Magento memperbaiki ini:

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

Saya membuat ini untuk menambahkan rumah dan produk ke remah roti. Ini juga mencegah JS dari mengeksekusi karena saya menggantinya dengan html default.

CompactCode
sumber
5

Dua baris ini mengembalikan blok remah roti kelas. Itu dia. Tidak ada plugin khusus atau yang lain:

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

Untuk siapa pun yang datang ke sini dan mungkin tidak ingin menginstal beberapa plugin hanya untuk ini, yang harus saya lakukan adalah menambahkan ini ke template saya (itu benar-benar tersembunyi) dan remah roti mulai muncul lagi:

<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>
Steve Weiss
sumber
Ini benar, tetapi tampaknya tidak mengikuti struktur remah yang benar. Remah roti halaman produk saya menunjukkan Beranda> Nama produk. Tidak disebutkan kategori yang dimilikinya.
Digital_Frankenstein