Magento2: le fil d'Ariane a disparu de la page du produit après la mise à niveau vers 2.2.4


19

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

veuillez effacer votre dossier var puis lancer bin / magento set: up.
hweb87

& par ailleurs? (J'ai déjà essayé tous les trucs réguliers)
Pini

@Pini Cela fonctionne parfaitement.
Arvind07

Je suis également confronté au même problème après la mise à niveau 2.2.5 ....
Mano M

Travaux! Seul petit problème que $ crumbInfo n'a pas renvoyé d'informations sur le premier / dernier, j'ai donc dû l'ajouter moi
Volvox

Réponses:


13

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:

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

Ensuite, j'ai écrit un petit plugin:

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

Enfin di.xml:

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

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.


Joli! J'espérais en fait que Magento fournirait un correctif officiel (autant que je sache - c'est un bug), alors j'ai essayé de rester dans la zone thématique autant que possible. Mais cela suffira et il serait facile de transformer votre solution en un module qui corrige cela.
Pini

Je suis également confronté au même problème ... Comment résoudre ce problème dans magento2.2.5
Mano M

Agréable. Cela fonctionne pour Magento 2.2.5. Merci
MGento

où dois-je mettre le code du "petit plugin"?
jogoe


5

Ces deux lignes restaurent le bloc de fil d'Ariane de classe. C'est ça. Pas de plugins personnalisés ou autre chose:

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

1

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:

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

C'est vrai, mais cela ne semble pas suivre la structure de miettes correcte. Ma page de produit affiche le fil d'Ariane Accueil> Nom du produit. Aucune mention des catégories auxquelles il appartient.
Digital_Frankenstein
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.