J'ai mis à jour Magento vers 2.2.4 et maintenant je n'ai plus de fil d'Ariane sur les pages produits. Ils apparaissent sur d'autres pages mais pas sur les produits. J'ai vérifié la source et j'ai remarqué qu'il y a un div avec la classe 'breadcrumbs' et quelques paramètres json, mais il est vide (pas d'erreur sur la console).
Une idée?
MISE À JOUR:
J'ai découvert que pour une raison que je ne peux pas expliquer, Magento a commencé à construire le fil d'Ariane des pages de produits basé sur la navigation du menu supérieur en utilisant JS et puisque dans mon cas j'ai changé le menu et utilisé différents sélecteurs CSS, il s'est arrêté travail.
Je crois que maintenant je vais pouvoir régler ça, mais je ne vois aucune bonne raison pour eux de faire ça, c'est beaucoup trop fragile ...
Ma solution temporaire (si cela aide quelqu'un ...):
1. Construisez un module et ajoutez un bloc qui étend \ Magento \ Theme \ Block \ Html \ Breadcrumbs afin d'ajouter la méthode getCrumbs () * Pas besoin de 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. Remplacez le modèle de fil d'Ariane sur la page du produit (application / design / frontend / fournisseur / thème / Magento_Catalog / templates / produit / 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; ?>
Réponses:
J'ai trouvé le même problème et je l'ai fait un peu plus facilement et sans ObjectManager. J'ai découvert comment cela se faisait avec les catégories et je l'ai utilisé. Dans
catalog_product_view.xml
, je réécris le modèle dans celui de Magento_Theme:Ensuite, j'ai écrit un petit plugin:
Enfin
di.xml
:Deux problèmes ont été corrigés: le fil d'Ariane manquant et le titre de page manquant (dans la section d'en-tête) dans la page du produit.
la source
Pour ceux qui veulent un module Fix jusqu'à ce que Magento corrige ceci:
https://github.com/CompactCodeEU/FixProductBreadcrumbs.git
J'ai créé cela pour ajouter la maison et le produit au fil d'Ariane. Cela empêche également le JS de s'exécuter car je le remplace par le code HTML par défaut.
la source
Ces deux lignes restaurent le bloc de fil d'Ariane de classe. C'est ça. Pas de plugins personnalisés ou autre chose:
la source
Pour tous ceux qui arrivent ici et qui ne veulent peut-être pas installer un plugin juste pour cela, tout ce que j'avais à faire était d'ajouter ceci à mon modèle (il est totalement masqué) et le fil d'Ariane a recommencé à apparaître:
la source