Magento2: панірувальні сухарі зникли із сторінки продукту після оновлення до 2.2.4


19

Я модернізував Magento до 2.2.4 і тепер на сторінках продуктів у мене немає сухарів. Вони відображаються на інших сторінках, але не на продуктах. Я перевірив джерело і помітив, що є div з класом 'breadcrumbs' та деякими параграфами json, але він порожній (помилок на консолі немає).

Будь-яка ідея?


ОНОВЛЕННЯ:
Я дізнався, що з причини, яку я не можу пояснити, Magento почав створювати сухарі на сторінках продуктів на основі навігації в головному меню за допомогою JS, оскільки в моєму випадку я змінив меню та використав різні селектори CSS, він зупинився робочий.
Я вірю, що зараз мені вдасться це виправити, але я не бачу жодної вагомої причини для цього, бо це занадто крихко ...


Моє тимчасове вирішення (якщо це комусь допомагає ...):

1. Створіть модуль та додайте блок, який розширюється \ Magento \ Тема \ Блок \ 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. Замініть шаблон панірувальних сухарів на сторінці продукту (додаток / дизайн / frontend / постачальник / тема / Magento_Catalog / шаблони / продукт / 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: up.
hweb87

& Крім того? (Я вже спробував усі звичайні речі)
Піні

@Pini Це прекрасно працює.
Arvind07

Я також зіткнувся з тим же питанням після оновлення 2.2.5 ....
Mano M

Працює! Єдина невелика проблема, що $ 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.