Zaktualizowałem Magento do wersji 2.2.4 i teraz nie mam okruszków na stronach produktów. Pojawiają się na innych stronach, ale nie na produktach. Sprawdziłem źródło i zauważyłem, że istnieje div z klasą „breadcrumbs” i niektórymi parametrami json, ale jest pusty (żadnych błędów na konsoli).
Dowolny pomysł?
AKTUALIZACJA:
Dowiedziałem się, że z powodu, którego nie potrafię wyjaśnić, Magento zaczął budować okruchy stron produktów na podstawie nawigacji w górnym menu za pomocą JS, a ponieważ w moim przypadku zmieniłem menu i użyłem różnych selektorów CSS, przestałem pracujący.
Wierzę, że teraz będę w stanie to naprawić, ale nie widzę żadnego dobrego powodu, aby to zrobić, to zbyt kruche ...
Moje tymczasowe obejście (jeśli pomaga komuś ...):
1. Zbuduj moduł i dodaj blok, który rozszerza \ Magento \ Theme \ Block \ Html \ Breadcrumbs, aby dodać metodę getCrumbs () * Nie ma potrzeby 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. Zastąp szablon breadcrumbs na stronie produktu (app / design / frontend / Vendor / Theme / Magento_Catalog / templates / product / 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; ?>
Odpowiedzi:
Znalazłem ten sam problem i zrobiłem to trochę łatwiej i bez ObjectManager. Dowiedziałem się, jak to się robi z kategoriami i wykorzystałem to. W
catalog_product_view.xml
, przepisuję szablon z powrotem do Magento_Theme:Potem napisałem małą wtyczkę:
Wreszcie
di.xml
:Naprawiono dwa problemy: brak okruchów chleba i brak tytułu strony (w sekcji nagłówka) na stronie produktu.
źródło
Dla tych, którzy chcą naprawić moduł, aż Magento to naprawi:
https://github.com/CompactCodeEU/FixProductBreadcrumbs.git
Stworzyłem to, aby dodać dom i produkt do bułki tartej. Zapobiega to również uruchomieniu JS, ponieważ zastępuję go domyślnym plikiem HTML.
źródło
Te dwie linie przywracają blok nawigacyjny klasy. Otóż to. Brak niestandardowych wtyczek lub czegoś innego:
źródło
Dla każdego, kto się tu pojawi i być może nie chce instalować wtyczki tylko do tego, wystarczyło dodać to do mojego szablonu (jest całkowicie ukryty), a bułka tarta znów się pojawiła:
źródło