Magento2: bułka tarta zniknęła ze strony produktu po aktualizacji do 2.2.4

19

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; ?>
Pini
źródło
wyczyść folder var, a następnie uruchom bin / magento set: up.
hweb87
& poza tym? (Próbowałem już wszystkich zwykłych rzeczy)
Pini
@Pini To działa idealnie.
Arvind07,
Mam również ten sam problem po aktualizacji 2.2.5 ....
Mano M
Pracuje! Tylko mały problem, że $ crumbInfo nie zwrócił informacji o pierwszym / ostatnim, więc musiałem to dodać
Volvox,

Odpowiedzi:

13

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:

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

Potem napisałem małą wtyczkę:

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

Wreszcie di.xml:

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

Naprawiono dwa problemy: brak okruchów chleba i brak tytułu strony (w sekcji nagłówka) na stronie produktu.

Tom jest
źródło
Niezłe! Miałem nadzieję, że Magento dostarczy oficjalną poprawkę (tyle, ile mogę powiedzieć - to błąd), więc starałem się pozostać w obszarze motywu tak bardzo, jak to możliwe. Ale tak się stanie i łatwo byłoby zmienić swoje rozwiązanie w moduł, który to naprawia.
Pini
Mam również ten sam problem ... Jak rozwiązać ten problem w magento2.2.5
Mano M
Ładny. Działa to dla Magento 2.2.5. Dzięki
MGento,
gdzie umieścić kod „małej wtyczki”?
jogoe
6

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.

CompactCode
źródło
5

Te dwie linie przywracają blok nawigacyjny klasy. Otóż ​​to. Brak niestandardowych wtyczek lub czegoś innego:

<referenceBlock name="breadcrumbs" template="Magento_Theme::html/breadcrumbs.phtml" />
<block class="Magento\Catalog\Block\Breadcrumbs" />
Detzler
źródło
1

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:

<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
źródło
To prawda, ale wydaje się, że nie odpowiada prawidłowej strukturze miękiszu. Moja strona produktu breadcrumbs pokazuje Strona główna> Nazwa produktu. Brak wzmianki o kategoriach, do których należy.
Digital_Frankenstein