Magento2: 2.2.4 sürümüne geçtikten sonra ürün sayfalarından ekmek kırıntıları kayboldu


19

Magento'yu 2.2.4'e yükselttim ve şimdi ürün sayfalarında ekmek kırıntılarım yok. Diğer sayfalarda görünürler ancak ürünlerde gösterilmezler. Kaynağı kontrol ettim ve 'ekmek kırıntıları' sınıfı ve bazı json params ile bir div olduğunu fark ettim, ama boş (konsolda hata yok).

Herhangi bir fikir?


GÜNCELLEME:
Açıklayamadığım bir nedenden ötürü, Magento'nun JS kullanarak üst menü navigasyonuna dayalı ürün sayfalarının kırıntılarını oluşturmaya başladığını öğrendim ve benim durumumda menüyü değiştirdiğimden ve farklı CSS seçicileri kullandığımdan, Çalışma.
Şimdi bunu düzeltebileceğime inanıyorum, ancak bunu yapmaları için iyi bir neden göremiyorum, bu çok kırılgan ...


Geçici Geçici Çözümüm (Birisi yardımcı olursa ...):

1. getCrumbs () yöntemini eklemek için bir modül oluşturun ve \ Magento \ Theme \ Block \ Html \ Breadcrumbs'u genişleten bir blok ekleyin * di.xml'e gerek yok

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. Ürün sayfasındaki ekmek kırıntıları şablonunu geçersiz kılın (app / design / frontend / Satıcı / Tema / 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; ?>

lütfen var klasörünüzü temizleyin ve sonra bin / magento set: up komutunu çalıştırın.
hweb87

& bunun yanında? (Ben zaten tüm düzenli şeyleri denedim)
Pini

@Pini Bu mükemmel çalışıyor.
Arvind07

Ben de 2.2.5 yükseltme sonra aynı sorunla karşı karşıya ....
Mano M

İşler! $ CrumbInfo ilk / son hakkında bilgi vermedi sadece küçük sorun bu yüzden kendim eklemek zorunda
Volvox

Yanıtlar:


13

Aynı sorunu buldum ve ObjectManager olmadan biraz daha kolay yaptım. Kategorilerle nasıl yapıldığını öğrendim ve bunu kullandım. Içinde catalog_product_view.xml, şablonu yeniden Magento_Theme's birine yeniden yazıyorum:

<referenceBlock name="breadcrumbs" template="Magento_Theme::html/breadcrumbs.phtml" />

Sonra küçük eklenti yazdım:

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

Son olarak, di.xml:

<type name="Magento\Catalog\Block\Product\View">
    <plugin name="add_catalog_breadcrumb_block" type="Vendor\Module\Plugin\Catalog\Block\Product\View" />
</type>

İki sorun giderildi: ürün sayfasında eksik kırıntılar ve eksik sayfa başlığı (baş kısımda).


Güzel! Aslında Magento'nun resmi bir düzeltme sağlayacağını umuyordum (anlayabildiğim kadarıyla - bir hata), bu yüzden tema alanında mümkün olduğunca kalmaya çalıştım. Ama bu işe yarayacak ve çözümünüzü bunu düzelten bir modüle dönüştürmek kolay olacaktır.
Pini

Ben de aynı sorunla karşı karşıya ... Bunu magento2.2.5
Mano M

Güzel. Bu Magento 2.2.5 için geçerlidir. Teşekkürler
MGento

"küçük eklenti" için kodu nereye koyacağım?
18:15


5

Bu iki çizgi, sınıf kırıntı bloğunu geri yükler. Bu kadar. Özel eklenti veya başka bir şey yok:

<referenceBlock name="breadcrumbs" template="Magento_Theme::html/breadcrumbs.phtml" />
<block class="Magento\Catalog\Block\Breadcrumbs" />

1

Buraya gelen ve belki de sadece bunun için bazı eklenti yüklemek istemeyen herkese, tek yapmam gereken bunu şablonuma eklemek (tamamen gizli) ve ekmek kırıntıları tekrar görünmeye başladı:

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

Bu doğrudur, ancak doğru kırıntı yapısını takip etmiyor gibi görünüyor. Ürün sayfamda kırıntıları gösteriliyor Anasayfa> Ürün adı. Ait olduğu kategorilerden bahsedilmiyor.
Digital_Frankenstein
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.