Magento 2 Store switcher hatası “section-config.js” içinde yakalanmadı TypeError: undefined (') özelliği' * 'okunamıyor


12

Özel temamda özel bir mağaza değiştirici kullanıyorum.

Blok şablonu aşağıdaki gibidir:

<?php if (count($block->getStores())>1): ?>
    <?php $id = $block->getIdModifier() ? '-' . $block->getIdModifier() : ''?>

    <span><?php echo $block->escapeHtml($block->getStoreName()) ?></span>

    <span>/</span>

    <?php foreach ($block->getStores() as $_lang): ?>
        <?php if ($_lang->getId() != $block->getCurrentStoreId()): ?>
            <span class="view-<?php echo $block->escapeHtml($_lang->getCode()); ?> switcher-option">
                <a href="#" data-post='<?php /* @escapeNotVerified */ echo $block->getTargetStorePostData($_lang); ?>'>
                    <?php echo $block->escapeHtml($_lang->getName()) ?>
                </a>
            </span>
        <?php endif; ?>
    <?php endforeach; ?>

<?php endif; ?>

Yeni mağaza bağlantısı doğru bir şekilde görüntülenir, bu yüzden xml şeyler tamam sanırım, ancak tıklandığında aşağıdaki hatayı alıyorum:

section-config.js: 33 Yakalanmamış TypeError: undefined öğesinin '*' özelliği okunamıyor (…)

Oluşturulan htmlaşağıdaki gibi görünür:

<span class="view-it switcher-option">
  <a href="#" data-post="{"action":"http:\/\/test.mysite.eu\/stores\/store\/switch\/","data":{"___store":"it","uenc":"aHR0cDovL3Rlc3QuZnJhZ2lhY29tb21pbGFuby5ldS8,"}}">
    It
  </a>
</span>

Deploy komutunu çalıştırıp var klasörünü kaldırdınız mı?
Rakesh Jesadiya

hayır XD Yapacağım ve takip edeceğim
davideghz

Şanssız koştum sudo php bin/magento setup:static-content:deploy. varKlasörü neden kaldırmalıyım ? Tam olarak neyi kaldırmalıyım?
davideghz

var klasörün tüm içeriğini kaldırmanız gerekiyor
Rakesh Jesadiya

1
@davideghz çözümü aldın mı?
Mohammad Mujassam

Yanıtlar:


14

Aynı sorunu yaşadım ve bu iki bloğun temadaki özelleştirmeler nedeniyle artık çağrılmadığını öğrendim.

İki blok varsayılan <referenceContainer name="content">olarak vendor / magento / module-customer / view / frontend / layout / default.xml dosyasına eklenir .

Bu blokları layout.xml dosyasına yeniden eklemeyi deneyin:

<block name="customer.section.config" class="Magento\Customer\Block\SectionConfig"
    template="Magento_Customer::js/section-config.phtml"/>
<block name="customer.customer.data"
    class="Magento\Customer\Block\CustomerData"
    template="Magento_Customer::js/customer-data.phtml"/>

Aynı problemim var ama bloklar işleniyor. Ben sepeti yeniden yükleme yöntemi çağrılırken bir requirJs yönteminde olduğumu, ancak blok işlenmeden önce JS yürütülür çünkü sanırım. Bunu önlemek için herhangi bir js modülüne güvenebilir miyim?
bpoiss

1
Sadece aynı sorunu vardı .. github.com/SnowdogApps/magento2-theme-blank-sass (Magento 2.2.6) kullanırken. Yukarıdaki iki bloğun eklenmesi sorunu çözdü. Teşekkürler
giolliano sulit

6

Projemizde section-config.js, yöntemdeki dosyada düzelttik getAffectedSections(hatamızın olduğu yer).
Son satırı değiştirdik:

return _.union(_.toArray(actions), _.toArray(sections['*']));

Aşağıdakine göre:

return (sections && sections.length > 0) ? _.union(_.toArray(actions), _.toArray(sections['*'])) : {};

Hiçbir bölüm etkilenmediğinde aslında boş bir dizi döndürür.


Çözümünüz iyi çalışıyor mu?
Jared Chu

1
Evet, işleyen bir geçici çözümdü, ancak IIRC, sorunumuzun gerçek kökü sonunda JS API'sinin biraz yanlış kullanılmasıydı. Bu düzeltmeyi önemsiz kılmadı, yine de kodun çalışmaya devam etmesini ve kritik hata durumlarında burada durmamasını sağlamak için bir koruma.
Flinth

1
Teşekkürler, çalışıyor ..
Ravi Soni

Benim için de çalışıyor. Ancak bazı kategorilerde mağaza görünümünü değiştirdiğimde, mağaza görünümü değiştirildikten sonra geçersiz form anahtarı alıyorum. Lütfen sayfayı yenileyin. Hiçbir formu olsa da .... Kafam karıştı
GG

0

Aynı konu üzerinde Ran rağmen customer.section.configve customer.customer.datadüzgün sayfasına yüklendi.

Ancak benim durumumda, bir uzantı bir bölüm yeniden yüklemeyi çok erken tetiklemeye çalıştığı için oldu (section-config.js doğru yapılandırmayla yüklenmeden önce).

getAffectedSectionsSection-config.js içine bir kesme noktası ekleyerek ve url değişkenini kontrol ederek sorunu çözmeyi başardı . Ardından, JS.s uzantısını customer.section.config bloğundan sonra yüklenecek şekilde taşıdı:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <move element="extension.js.block" destination="content" after="customer.section.config"/> 
    </body>
</page>

0

Bizim durumumuzda, bu, müşteri-data.js dosyasını zaten başarı sayfasında çağrıldıktan sonra yükleyen varsayılan bir şablonda biraz koddu.

Dosya bulduk: vendor/magento/module-checkout/view/frontend/templates/success.phtml

şu kodu yüklüyordu:

<script>
    require([
        'Magento_Customer/js/customer-data'
    ], function (customerData) {
        var sections = ['cart'];
        customerData.invalidate(sections);
        customerData.reload(sections, true);
    });
</script>

Bu kodun kaldırılması, tema dosyaları dizinimizde bu dosyanın bir kopyasını oluşturarak ve rahatsız edici kod snippet'ini kaldırarak yaptığımız sorunu düzeltti.

Hatanın nerede olduğunu bulmak için Chrome Dev araçlarını kullanabilirsiniz ve daha sonra yerel geliştiricinizdeki bu dosyada daha önce console.trace();, konsola hatayı atan işlevi çağırmak için bir çağrı ekleyin . Yanlış yüklediğiniz yere giden zinciri izleyin.

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.