Я обновил Magento до 2.2.4 и теперь у меня нет панировочных сухарей на страницах продукта. Они появляются на других страницах, но не на продуктах. Я проверил источник и заметил, что есть div с классом «хлебные крошки» и некоторыми параметрами json, но он пуст (нет ошибок в консоли).
Любая идея?
ОБНОВЛЕНИЕ:
я обнаружил, что по причине, которую я не могу объяснить, 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; ?>
Ответы:
Я нашел ту же проблему и сделал это немного проще и без ObjectManager. Я узнал, как это делается с категориями, и использовал это. В
catalog_product_view.xml
, я переписываю шаблон обратно в Magento_Theme один:Тогда я написал небольшой плагин:
И, наконец,
di.xml
:Были исправлены две проблемы: отсутствующие хлебные крошки и отсутствующий заголовок страницы (в главном разделе) на странице продукта.
источник
Для тех, кто хочет исправить модуль, пока Magento не исправит это:
https://github.com/CompactCodeEU/FixProductBreadcrumbs.git
Я создал это, чтобы добавить дом и продукт к хлебной крошке. Также это препятствует выполнению JS, поскольку я заменяю его HTML по умолчанию.
источник
Эти две строки восстанавливают класс хлебных крошек. Вот и все. Нет пользовательских плагинов или что-то еще:
источник
Всем, кто попадает сюда и, возможно, не хочет устанавливать какой-либо плагин только для этого, все, что мне нужно было сделать, это добавить это в мой шаблон (он полностью скрыт), и крошки снова начали появляться:
источник