Magento2:升级到2.2.4后,面包屑从产品页面消失


19

我将Magento升级到2.2.4,现在产品页面上没有面包屑。它们显示在其他页面上,而不显示在产品上。我检查了源并注意到有一个带有“ breadcrumbs”类和一些json参数的div,但是它是空的(控制台上没有错误)。

任何想法?


更新:
我发现由于某种原因我无法解释,Magento开始使用JS在顶部菜单导航的基础上构建产品页面的面包屑,因为我改变了菜单并使用了不同的CSS选择器,因此它停止了工作。
我相信现在我可以解决这个问题,但是我看不出他们有任何充分的理由这样做,这太脆弱了……


我的临时解决方法(如果有帮助,...):

1.构建一个模块并添加一个扩展\ Magento \ Theme \ Block \ Html \ Breadcrumbs的块,以便添加方法getCrumbs()*不需要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.覆盖产品页面上的面包屑模板(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; ?>

请清除您的var文件夹,然后运行bin / magento set:up。
hweb87

& 除此之外?(我已经尝试过所有常规的东西)
Pini

@Pini这很完美。
Arvind07年

我也面临着同样的问题,升级2.2.5后....
马诺中号

作品!$ crumbInfo不会返回有关第一个/最后一个信息的唯一小问题,所以我不得不自己添加此信息
Volvox

Answers:


13

我发现了相同的问题,并且在没有ObjectManager的情况下做到了一些轻松。我发现了类别的处理方式并使用了它。在中catalog_product_view.xml,我将模板重写回Magento_Theme的模板:

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

然后我写了一个小插件:

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

最后,di.xml

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

已修复两个问题:缺少面包屑和产品页面中缺少页面标题(在标题部分)。


好一个!我实际上希望Magento提供一个官方修复程序(据我所知-这是一个错误),所以我试图尽可能地留在主题区域。但这确实可以,并且很容易将您的解决方案变成一个可以解决此问题的模块。
Pini

我也面临同样的问题...如何在magento2.2.5解决这个问题
马诺中号

真好 这适用于Magento 2.2.5。谢谢
MGento '18

我在哪里将“小插件”的代码放在哪里?
jogoe


5

这两行还原了类面包屑块。而已。没有自定义插件或其他:

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

1

对于到这里并且可能不想为此安装某些插件的其他人,我要做的就是将其添加到模板中(它完全隐藏了),并且面包屑开始再次出现:

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

的确如此,但是似乎并没有遵循正确的面包屑结构。我的产品页面面包屑显示Home>产品名称。没有提及它所属的类别。
Digital_Frankenstein
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.