Magento2:2.2.4にアップグレードした後、製品ページからパンくずリストが消えた


19

Magentoを2.2.4にアップグレードしましたが、製品ページにブレッドクラムがありません。他のページには表示されますが、製品には表示されません。ソースを確認し、「breadcrumbs」クラスといくつかのjsonパラメーターを持つdivがあることに気付きましたが、空です(コンソールにエラーはありません)。

何か案が?


更新:
説明できない理由で、MagentoはJSを使用してトップメニューナビゲーションに基づいて製品ページのパンくずリストを構築し始めました。私の場合はメニューを変更して別のCSSセレクターを使用したため、停止しましたワーキング。
私は今これを修正できると信じていますが、彼らがそれをする正当な理由を見ることができません、それはあまりにも壊れやすいです...


私の一時的な回避策(誰かに役立つ場合):

1.モジュールをビルドし、メソッドgetCrumbs()を追加するために\ Magento \ Theme \ Block \ Html \ Breadcrumbsを拡張するブロックを追加します* 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これは完璧に機能します。
-Arvind07

また、私は....アップグレード2.2.5の後に同じ問題に直面して
真野M

動作します!私はこれを自分で追加する必要がありましたので、$ crumbInfoが最初/最後に関する情報を返さなかったという小さな問題のみ
ボルボックス

回答:


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>

2つの問題が修正されました。パンくずの欠落と、製品ページのページタイトルの欠落(ヘッドセクション)


良いですね!実際、Magentoが公式の修正を提供することを望んでいたので(可能な限り-これはバグです)、可能な限りテーマエリアに留まるようにしました。しかし、これで解決し、ソリューションをそれを修正するモジュールに簡単に変えることができます。
ピニ

私も同じ問題に直面しています... magento2.2.5でこれを解決する方法
マノM

いいね これはMagento 2.2.5で機能します。ありがとう
-MGento

「小さなプラグイン」のコードはどこに配置しますか?
jogoe


5

これらの2行は、クラスのブレッドクラムブロックを復元します。それでおしまい。カスタムプラグインなどはありません:

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

これは事実ですが、正しいパン粉の構造に従っていないようです。製品ページのパンくずリストには、ホーム>製品名と表示されます。それが属するカテゴリーについての言及はありません。
Digital_Frankenstein
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.