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