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; ?>
Antworten:
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.xml
schreibe ich die Vorlage zurück zu Magento_Theme:Dann habe ich ein kleines Plugin geschrieben:
Zum Schluss
di.xml
:Zwei Probleme wurden behoben: Fehlende Breadcrumbs und fehlender Seitentitel (im Kopfbereich) auf der Produktseite.
quelle
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.
quelle
Diese beiden Zeilen stellen den Klassen-Breadcrumb-Block wieder her. Das ist es. Keine benutzerdefinierten Plugins oder etwas anderes:
quelle
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:
quelle