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; ?>
Jawaban:
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:Lalu saya menulis plugin kecil:
Akhirnya,
di.xml
:Dua masalah telah diperbaiki: remah roti yang hilang dan judul halaman yang hilang (di bagian kepala) di halaman produk.
sumber
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.
sumber
Dua baris ini mengembalikan blok remah roti kelas. Itu dia. Tidak ada plugin khusus atau yang lain:
sumber
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:
sumber