Magento2: las migas de pan desaparecieron de la página del producto después de actualizar a 2.2.4


19

Actualicé Magento a 2.2.4 y ahora no tengo migas de pan en las páginas de productos. Aparecen en otras páginas pero no en productos. Revisé la fuente y noté que hay un div con la clase 'breadcrumbs' y algunos parámetros json, pero está vacío (sin errores en la consola).

¿Alguna idea?


ACTUALIZACIÓN:
descubrí que por una razón que no puedo explicar, Magento comenzó a construir las migas de pan de las páginas del producto basadas en la navegación del menú superior usando JS y, en mi caso, cambié el menú y usé diferentes selectores CSS, se detuvo trabajando.
Creo que ahora podré arreglar esto, pero no veo ninguna buena razón para que lo hagan, es demasiado frágil ...


Mi solución temporal (si ayuda a alguien ...):

1. Cree un módulo y agregue un bloque que extienda \ Magento \ Theme \ Block \ Html \ Breadcrumbs para agregar el método getCrumbs () * No es necesario 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. Anule la plantilla de migas de pan en la página del producto (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; ?>

borre su carpeta var y luego ejecute bin / magento set: up.
hweb87

& ¿aparte de eso? (Ya probé todas las cosas normales)
Pini

@Pini Esto funciona perfecto.
Arvind07

También enfrento el mismo problema después de la actualización 2.2.5 ....
Mano M

¡Trabajos! Solo un pequeño problema que $ crumbInfo no devolvió información sobre el primero / último, así que tuve que agregar esto yo mismo
Volvox

Respuestas:


13

Encontré el mismo problema y lo hice un poco más fácil y sin ObjectManager. Descubrí cómo se hace con las categorías y lo usé. En catalog_product_view.xml, reescribo la plantilla nuevamente a la de Magento_Theme:

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

Luego escribí un pequeño complemento:

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

Por último, di.xml:

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

Se han solucionado dos problemas: faltan migas de pan y falta el título de la página (en la sección de encabezado) en la página del producto.


¡Buena esa! De hecho, esperaba que Magento proporcionara una solución oficial (por lo que puedo decir, es un error), así que intenté permanecer en el área temática tanto como sea posible. Pero esto servirá y sería fácil convertir su solución en un módulo que lo arregle.
Pini

También me enfrento al mismo problema ... Cómo resolver esto en magento2.2.5
Mano M

Agradable. Esto funciona para Magento 2.2.5. Gracias
MGento

¿Dónde pongo el código para el "pequeño complemento"?
jogoe


5

Estas dos líneas restauran el bloque de ruta de exploración de clase. Eso es. Sin complementos personalizados u otra cosa:

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

1

Para cualquier otra persona que llegue aquí y tal vez no quiera instalar algún complemento solo para esto, todo lo que tuve que hacer fue agregar esto a mi plantilla (está totalmente oculto) y las migas de pan comenzaron a aparecer nuevamente:

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

Esto es cierto, pero no parece seguir la estructura de miga correcta. Las migas de pan de la página de mi producto muestran Inicio> Nombre del producto. No se mencionan las categorías a las que pertenece.
Digital_Frankenstein
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.