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; ?>
Pini
quelle
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.

Tom ist
quelle
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
6

Für diejenigen, die ein Fix-Modul benötigen, bis Magento dies behebt:

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

Ich habe dies erstellt, um das Haus und das Produkt zur Brotkrume hinzuzufügen. Dies verhindert auch, dass JS ausgeführt wird, da ich es durch das Standard-HTML ersetze.

CompactCode
quelle
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" />
Detzler
quelle
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>
Steve Weiss
quelle
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