Magento 2 Store switcher error pada "section-config.js" UnEught TypeError: Tidak dapat membaca properti '*' dari undefined (...)

12

Saya menerapkan pengalih toko khusus dalam tema khusus saya.

Blokir template adalah sebagai berikut:

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

Tautan ke toko baru ditampilkan dengan benar, jadi saya kira hal-hal xml OK, tetapi pada klik saya menerima kesalahan berikut:

section-config.js: 33 UnEught TypeError: Tidak dapat membaca properti '*' dari undefined (...)

Yang dihasilkan htmlterlihat seperti berikut:

<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>
davideghz
sumber
Sudahkah Anda menjalankan perintah deploy dan menghapus folder var?
Rakesh Jesadiya
tidak XD saya akan melakukannya dan menindaklanjuti
davideghz
Aku hanya berlari sudo php bin/magento setup:static-content:deploytanpa keberuntungan. Mengapa saya harus menghapus varfolder? Apa sebenarnya yang harus saya hapus?
davideghz
Anda harus menghapus semua konten folder var
Rakesh Jesadiya
1
@davideghz apakah Anda mendapatkan solusinya?
Mohammad Mujassam

Jawaban:

14

Saya memiliki masalah yang sama dan menemukan bahwa dua blok ini tidak dipanggil lagi karena penyesuaian dalam tema.

Dua blok per default ditambahkan di <referenceContainer name="content">vendor / magento / module-customer / view / frontend / layout / default.xml.

Coba tambahkan kembali blok ini di layout.xml Anda:

<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"/>
Anna Völkl
sumber
Saya memiliki Masalah yang sama tetapi Blok diberikan. Saya kira itu karena saya menggunakan metode needJs saat memanggil metode reload cart, tetapi JS dijalankan sebelum blok di-render. Bisakah saya bergantung pada modul js untuk menghindari ini?
bpoiss
1
Baru saja mengalami masalah yang sama persis ini .. saat menggunakan github.com/SnowdogApps/magento2-theme-blank-sass (Magento 2.2.6). Menambahkan dua blok di atas memperbaiki masalah. Terima kasih
giolliano sulit
5

Pada proyek kami, kami memperbaikinya dalam section-config.jsfile dalam metode getAffectedSections(yang merupakan tempat kesalahan kami).
Kami mengganti baris terakhir:

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

Dengan yang berikut ini:

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

Untuk benar-benar mengembalikan array kosong ketika tidak ada bagian yang terpengaruh.

Flinth
sumber
Apakah solusi Anda berfungsi dengan baik?
Jared Chu
1
Ya itu adalah solusi yang berfungsi, tetapi IIRC, akar sebenarnya dari masalah kami adalah sedikit penyalahgunaan API JS pada akhirnya. Itu tidak membuat perbaikan ini tidak relevan, itu masih merupakan perlindungan untuk memastikan kode terus berjalan dan tidak berhenti di sini, dalam kasus kesalahan tidak kritis.
Flinth
1
Terima kasih, Ini berfungsi ..
Ravi Soni
Ini bekerja untuk saya juga. Tetapi dalam beberapa kategori ketika saya mengubah tampilan toko, setelah tampilan toko diubah saya mendapatkan kunci formulir tidak valid. Harap segarkan halaman. Tidak ada formulir di sana .... Saya bingung
GG
0

Berlari melintasi masalah yang sama meskipun customer.section.configdan customer.customer.datadimuat dengan benar ke halaman.

Namun dalam kasus saya itu terjadi karena ekstensi mencoba memicu bagian-reload terlalu dini (sebelum bagian-config.js dimuat dengan konfigurasi yang benar).

Berhasil menyelesaikannya dengan menambahkan breakpoint di getAffectedSectionsbagian-config.js dan memeriksa variabel url. Kemudian, pindahkan JS extension untuk memuat setelah blok customer.section.config:

<?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>
sduif
sumber
0

Dalam kasus kami, ini adalah sedikit kode dalam templat default yang memuat file customer-data.js setelah dipanggil pada halaman sukses.

Kami menemukan file: vendor/magento/module-checkout/view/frontend/templates/success.phtml

sedang memuat kode ini:

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

Menghapus kode ini memperbaikinya, yang kami lakukan dengan membuat salinan file ini di direktori templat tema kami dan menghapus potongan kode yang menyinggung.

Anda dapat menggunakan alat Chrome Dev untuk mencari tahu di mana kesalahan itu terjadi dan kemudian sebelum di file itu di dev lokal Anda menambahkan console.trace();panggilan untuk menetapkan apa yang memanggil fungsi yang melemparkan kesalahan di konsol. Ikuti rantai ke tempat Anda memuat barang dengan tidak tepat.

Joshua Fricke
sumber