Magento2: migalhas de pão desapareceram da página do produto após a atualização para 2.2.4

19

Atualizei o Magento para 2.2.4 e agora não tenho migalhas de pão nas páginas dos produtos. Eles aparecem em outras páginas, mas não em produtos. Verifiquei a fonte e notei que há uma div com a classe 'breadcrumbs' e alguns parâmetros json, mas está vazia (sem erros no console).

Qualquer ideia?


ATUALIZAÇÃO:
Descobri que, por uma razão que não sei explicar, o Magento começou a construir as trilhas de navegação das páginas do produto com base na navegação do menu superior usando JS e, como no meu caso, mudei o menu e usei seletores CSS diferentes, ele parou trabalhando.
Acredito que agora vou conseguir consertar isso, mas não vejo nenhuma boa razão para fazer isso, é muito frágil ...


Minha solução temporária (se isso ajudar alguém ...):

1. Crie um módulo e adicione um bloco que estenda \ Magento \ Theme \ Block \ Html \ Breadcrumbs para adicionar o método getCrumbs () * Não há necessidade 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. Substitua o modelo de trilhas de navegação na página do produto (app / design / frontend / Fornecedor / 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; ?>
Pini
fonte
limpe sua pasta var e execute bin / magento set: up.
hweb87 24/05
& além disso? (Eu já tentei todas as coisas regular)
Pini
@Pini Isso funciona perfeito.
Arvind07
Eu também enfrentando mesmo problema após a atualização 2.2.5 ....
Mano M
Trabalho! Apenas pequeno problema que $ crumbInfo não retornou informações sobre o primeiro / último, então eu tive que adicionar isso mesmo
Volvox

Respostas:

13

Encontrei o mesmo problema e o fiz um pouco mais fácil e sem o ObjectManager. Eu descobri como é feito com categorias e usei isso. Em catalog_product_view.xml, reescrevo o modelo de volta ao modelo do Magento_Theme:

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

Então eu escrevi pequeno 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;
    }
}

Finalmente di.xml:

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

Dois problemas foram corrigidos: falta de migalhas de pão e título da página (na seção principal) na página do produto.

tom é
fonte
Agradável! Na verdade, eu esperava que o Magento fornecesse uma correção oficial (tanto quanto eu posso dizer - é um bug), então tentei permanecer na área temática o máximo possível. Mas isso funcionará e seria fácil transformar sua solução em um módulo que conserte isso.
Pini
Eu também enfrento o mesmo problema ... Como resolver isso no magento2.2.5
Mano M
Agradável. Isso funciona para o Magento 2.2.5. Obrigado
MGento
onde coloco o código para o "pequeno plugin"?
jogoe
6

Para quem quer um módulo de correção até o Magento corrigir isso:

https://github.com/CompactCodeEU/FixProductBreadcrumbs.git

Eu criei isso para adicionar a casa e o produto à trilha de navegação. Além disso, isso impede que o JS seja executado, pois eu o substituo pelo html padrão.

CompactCode
fonte
5

Essas duas linhas restauram o bloco de navegação de classe. É isso aí. Nenhum plug-in personalizado ou outra coisa:

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

Para qualquer pessoa que chegue aqui e talvez não queira instalar algum plug-in apenas para isso, tudo que eu precisava fazer era adicionar isso ao meu modelo (está totalmente oculto) e a trilha de navegação começou a aparecer novamente:

<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>
Steve Weiss
fonte
Isso é verdade, mas parece não seguir a estrutura correta das migalhas. As trilhas de navegação da minha página do produto mostram Início> Nome do produto Nenhuma menção das categorias às quais pertence.
Digital_Frankenstein