Magento2: breadcrumb scomparso dalla pagina del prodotto dopo l'aggiornamento a 2.2.4


19

Ho aggiornato Magento alla 2.2.4 e ora non ho il pangrattato nelle pagine dei prodotti. Vengono visualizzati su altre pagine ma non sui prodotti. Ho controllato la fonte e ho notato che c'è un div con la classe "breadcrumbs" e alcuni parametri json, ma è vuoto (nessun errore sulla console).

Qualche idea?


AGGIORNAMENTO:
Ho scoperto che per un motivo che non posso spiegare, Magento ha iniziato a costruire il pangrattato delle pagine del prodotto in base alla navigazione del menu principale utilizzando JS e poiché nel mio caso ho cambiato il menu e utilizzato diversi selettori CSS, si è fermato Lavorando.
Credo che ora sarò in grado di risolvere questo problema, ma non vedo alcuna buona ragione per farlo, è troppo fragile ...


La mia soluzione temporanea (se aiuta qualcuno ...):

1. Costruisci un modulo e aggiungi un blocco che estende \ Magento \ Theme \ Block \ Html \ Breadcrumbs per aggiungere il metodo getCrumbs () * Non c'è bisogno di 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. Sovrascrivi il modello breadcrumb sulla pagina del prodotto (app / design / frontend / fornitore / tema / 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; ?>

per favore cancella la tua cartella var quindi esegui bin / magento set: up.
hweb87,

& a parte quello? (Ho già provato tutte le cose normali)
Pini,

@Pini Funziona perfettamente.
Arvind07,

Ho anche riscontrato lo stesso problema dopo l'aggiornamento 2.2.5 ....
Mano M

Lavori! L'unico piccolo problema è che $ crumbInfo non ha restituito informazioni sul primo / ultimo, quindi ho dovuto aggiungerlo io stesso
Volvox,

Risposte:


13

Ho riscontrato lo stesso problema e l'ho fatto un po 'più facilmente e senza ObjectManager. Ho scoperto come funziona con le categorie e l'ho usato. In catalog_product_view.xml, riscrivo il modello su quello di Magento_Theme:

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

Quindi ho scritto un piccolo 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;
    }
}

Infine di.xml:

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

Sono stati risolti due problemi: pangrattato mancante e titolo della pagina mancante (nella sezione head) nella pagina del prodotto.


Ben fatto! In realtà speravo che Magento potesse fornire una correzione ufficiale (per quanto posso dire - è un bug), quindi ho cercato di rimanere il più possibile nell'area tematica. Ma questo farà e sarebbe facile trasformare la tua soluzione in un modulo che lo risolva.
Pini,

Devo anche affrontare lo stesso problema ... Come risolverlo in magento2.2.5
Mano M

Bello. Questo funziona con Magento 2.2.5. Grazie
MGento

dove metto il codice per il "piccolo plugin"?
jogoe,


5

Queste due righe ripristinano il blocco breadcrumb di classe. Questo è tutto. Nessun plug-in personalizzato o qualcos'altro:

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

1

A chiunque venga qui e forse non vuole installare alcuni plugin solo per questo, tutto quello che dovevo fare era aggiungere questo al mio modello (è totalmente nascosto) e il breadcrumb ha ricominciato a comparire:

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

Questo è vero, ma non sembra seguire la corretta struttura delle briciole. La mia pagina del prodotto breadcrumb mostra Home> Nome prodotto. Nessuna menzione delle categorie a cui appartiene.
Digital_Frankenstein,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.