Magento2: хлебные крошки исчезли со страницы продукта после обновления до 2.2.4


19

Я обновил 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; ?>

пожалуйста, очистите папку var, затем запустите bin / magento set: up.
hweb87

& Кроме того? (Я уже попробовал все обычные вещи)
Пини

@Pini Это прекрасно работает.
Arvind07

Я также сталкиваюсь с той же проблемой после обновления 2.2.5 ....
Мано М

Работает! Единственная небольшая проблема, что $ crumbInfo не возвращал информацию о первом / последнем, поэтому мне пришлось добавить это самому
Volvox

Ответы:


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 предоставит официальное исправление (насколько я могу судить - это ошибка), поэтому я постарался как можно больше оставаться в области тем. Но это подойдет, и было бы легко превратить ваше решение в модуль, который это исправит.
Пини

Я также сталкиваюсь с той же проблемой ... Как решить эту проблему в magento2.2.5
Mano M

Ницца. Это работает для Magento 2.2.5. Спасибо
MGento

где я могу разместить код для "маленького плагина"?
Jogoe

6

Для тех, кто хочет исправить модуль, пока Magento не исправит это:

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

Я создал это, чтобы добавить дом и продукт к хлебной крошке. Также это препятствует выполнению JS, поскольку я заменяю его HTML по умолчанию.


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>

Это правда, но, похоже, она не соответствует правильной структуре мякиша. Моя страница продукта панировочные сухарики Показать Главная> Название продукта. Нет упоминания о категориях, к которым он принадлежит.
Digital_Frankenstein,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.