Magento2: Breadcrumbs sind nach dem Upgrade auf 2.2.4 von der Produktseite verschwunden


19

Ich habe Magento auf 2.2.4 aktualisiert und habe jetzt keine Breadcrumbs auf den Produktseiten. Sie erscheinen auf anderen Seiten, jedoch nicht auf Produkten. Ich habe die Quelle überprüft und festgestellt, dass es ein Div mit der 'Breadcrumbs'-Klasse und einigen Json-Parametern gibt, aber es ist leer (keine Fehler auf der Konsole).

Irgendeine Idee?


UPDATE:
Ich habe herausgefunden, dass Magento aus einem Grund, den ich nicht erklären kann, begonnen hat, die Brotkrumen der Produktseiten basierend auf der Top-Menü-Navigation mit JS & zu erstellen, da ich in meinem Fall das Menü geändert und verschiedene CSS-Selektoren verwendet habe Arbeiten.
Ich glaube, dass ich das jetzt beheben kann, aber ich sehe keinen guten Grund für sie, das zu tun, es ist viel zu zerbrechlich ...


Meine vorübergehende Problemumgehung (wenn es jemandem hilft ...):

1. Erstellen Sie ein Modul und fügen Sie einen Block hinzu, der \ Magento \ Theme \ Block \ Html \ Breadcrumbs erweitert, um die Methode getCrumbs () hinzuzufügen. * Keine di.xml erforderlich

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. Überschreiben Sie die Breadcrumbs-Vorlage auf der Produktseite (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; ?>

Bitte löschen Sie Ihren var-Ordner und führen Sie bin / magento set: up aus.
hweb87

& Außerdem? (Ich habe bereits alle regulären Sachen ausprobiert)
Pini

@Pini Das funktioniert perfekt.
Arvind07

Ich stehe auch vor dem gleichen Problem nach dem Upgrade 2.2.5 ....
Mano M

Funktioniert! Einziges kleines Problem, dass $ crumbInfo keine Informationen über das Erste / Letzte zurückgab, also musste ich dies selbst hinzufügen
Volvox

Antworten:


13

Ich fand das gleiche Problem und machte es ein bisschen einfacher und ohne ObjectManager. Ich habe herausgefunden, wie es mit Kategorien gemacht wird und habe das verwendet. In catalog_product_view.xmlschreibe ich die Vorlage zurück zu Magento_Theme:

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

Dann habe ich ein kleines Plugin geschrieben:

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

Zum Schluss di.xml:

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

Zwei Probleme wurden behoben: Fehlende Breadcrumbs und fehlender Seitentitel (im Kopfbereich) auf der Produktseite.


Schön! Ich hatte tatsächlich gehofft, dass Magento eine offizielle Lösung bereitstellen würde (soweit ich das beurteilen kann - es ist ein Fehler), also habe ich versucht, so weit wie möglich im Themenbereich zu bleiben. Dies ist jedoch ausreichend und es wäre einfach, Ihre Lösung in ein Modul umzuwandeln, das das behebt.
Pini

Ich stehe auch vor dem gleichen Problem ... So lösen Sie dieses Problem in magento2.2.5
Mano M

Nett. Dies funktioniert für Magento 2.2.5. Vielen Dank
MGento

Wo lege ich den Code für das "kleine Plugin"?
Jogoe


5

Diese beiden Zeilen stellen den Klassen-Breadcrumb-Block wieder her. Das ist es. Keine benutzerdefinierten Plugins oder etwas anderes:

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

1

Für alle anderen, die hierher kommen und vielleicht kein Plugin dafür installieren möchten, war alles, was ich tun musste, dies zu meiner Vorlage hinzuzufügen (sie ist völlig versteckt) und die Brotkrumen wurden wieder angezeigt:

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

Dies ist wahr, aber es scheint nicht der richtigen Krümelstruktur zu folgen. Meine Produktseite Paniermehl anzeigen Startseite> Produktname. Keine Erwähnung der Kategorien, zu denen es gehört.
Digital_Frankenstein
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.