ข้อผิดพลาดของตัวสลับเปลี่ยน Magento 2 Store ใน“ section-config.js” Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ '*' จากไม่ได้กำหนด (…)


12

ฉันกำลังใช้ตัวจัดการร้านค้าแบบกำหนดเองในธีมที่กำหนดเองของฉัน

เทมเพลตบล็อกมีดังนี้:

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

ลิงก์ไปยังร้านค้าใหม่แสดงอย่างถูกต้องดังนั้นฉันเดาว่า xml stuff นั้นโอเค แต่เมื่อคลิกฉันได้รับข้อผิดพลาดต่อไปนี้:

section-config.js: 33 Uncaught TypeError: ไม่สามารถอ่านคุณสมบัติ '*' จากไม่ได้กำหนด (…)

สิ่งที่สร้างขึ้นhtmlมีลักษณะดังนี้:

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

คุณเรียกใช้คำสั่งปรับใช้และลบโฟลเดอร์ var หรือไม่
Rakesh Jesadiya

Nope XD ฉันจะทำมันและติดตาม
davideghz

ฉันเพิ่งวิ่งโดยsudo php bin/magento setup:static-content:deployไม่มีโชค ทำไมฉันต้องลบvarโฟลเดอร์ ฉันควรลบอะไรอย่างแน่นอน
davideghz

คุณต้องลบเนื้อหาทั้งหมดของโฟลเดอร์ var
Rakesh Jesadiya

1
@davideghz คุณได้รับการแก้ปัญหาหรือไม่
Mohammad Mujassam

คำตอบ:


14

ฉันมีปัญหาเดียวกันและพบว่าบล็อกทั้งสองนี้ไม่ได้เรียกอีกต่อไปเนื่องจากการปรับแต่งในธีม

สองช่วงตึกต่อหนึ่งค่าเริ่มต้นที่เพิ่มใน<referenceContainer name="content">ผู้ขาย / magento / module-customer / view / frontend / layout / default.xml

ลองเพิ่มบล็อกเหล่านี้อีกครั้งใน layout.xml ของคุณ:

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

ฉันมีปัญหาเดียวกัน แต่บล็อกแสดงผล ฉันเดาว่าเป็นเพราะฉันอยู่ในวิธี requireJs ในขณะที่เรียกวิธีการโหลดรถเข็น แต่ JS จะดำเนินการก่อนที่จะมีการแสดงบล็อก ฉันสามารถพึ่งพาโมดูล js ใด ๆ เพื่อหลีกเลี่ยงปัญหานี้ได้หรือไม่?
bpoiss

1
เพิ่งมีปัญหาเดียวกันนี้ .. ในขณะที่ใช้github.com/SnowdogApps/magento2-theme-blank-sass (Magento 2.2.6) การเพิ่มสองช่วงตึกด้านบนช่วยแก้ไขปัญหาได้ ขอบคุณ
giolliano sulit

6

ในโครงการของเราเราแก้ไขในsection-config.jsไฟล์ในวิธีการgetAffectedSections(ซึ่งเป็นที่ที่ข้อผิดพลาดของเราคือ)
เราแทนที่บรรทัดสุดท้าย:

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

โดยหนึ่งต่อไปนี้:

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

เมื่อต้องการส่งคืนอาร์เรย์ว่างเปล่าจริง ๆ เมื่อไม่มีส่วนได้รับผล


โซลูชันของคุณทำงานได้ดีหรือไม่
Jared Chu

1
ใช่มันเป็นวิธีแก้ปัญหาการทำงาน แต่ IIRC รากที่แท้จริงของปัญหาของเราคือการใช้ JS API ในทางที่ผิดเล็กน้อยในท้ายที่สุด มันไม่ได้ทำให้การแก้ไขนี้ไม่เกี่ยวข้อง แต่ก็ยังคงมีการป้องกันเพื่อให้แน่ใจว่ารหัสยังคงทำงานและไม่หยุดที่นี่ในกรณีที่ไม่เกิดข้อผิดพลาดร้ายแรง
Flinth

1
ขอบคุณ. มันใช้งานได้แล้ว ..
Ravi Soni

มันใช้งานได้สำหรับฉันด้วย แต่ในบางหมวดหมู่เมื่อฉันเปลี่ยนมุมมองร้านค้าหลังจากเปลี่ยนมุมมองร้านค้าแล้วฉันจะได้รับคีย์ฟอร์มที่ไม่ถูกต้อง กรุณารีเฟรชหน้า ไม่มีรูปแบบที่นั่น .... ฉันสับสน
GG

0

วิ่งข้ามปัญหาเดียวกันแม้ว่าcustomer.section.configและcustomer.customer.dataถูกโหลดลงในหน้าอย่างถูกต้อง

ในกรณีของฉัน แต่มันเกิดขึ้นเพราะส่วนขยายพยายามเรียกส่วนโหลดใหม่เร็วเกินไป (ก่อนที่ส่วน -config.js ถูกโหลดด้วยการกำหนดค่าที่เหมาะสม)

จัดการเพื่อแก้ปัญหาโดยการเพิ่มเบรกพอยต์ในgetAffectedSectionsส่วน-config.js และตรวจสอบตัวแปร url จากนั้นย้ายส่วนขยาย JS เพื่อโหลดหลังจาก customer.section.config block:

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

ในกรณีของเรานี่เป็นรหัสเล็กน้อยในเทมเพลตเริ่มต้นซึ่งโหลดไฟล์ customer-data.js หลังจากที่มันถูกเรียกบนหน้าสำเร็จแล้ว

เราพบไฟล์: vendor/magento/module-checkout/view/frontend/templates/success.phtml

กำลังโหลดรหัสนี้:

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

การลบรหัสนี้ได้รับการแก้ไขซึ่งเราทำได้โดยการสร้างสำเนาของไฟล์นี้ในไดเรกทอรีแม่แบบธีมของเราและลบข้อมูลรหัสที่ละเมิด

คุณสามารถใช้เครื่องมือ Chrome Dev เพื่อค้นหาว่ามีข้อผิดพลาดเกิดขึ้นที่ไหนจากนั้นก่อนหน้านี้ในไฟล์ของคุณที่ dev ในพื้นที่ของคุณเพื่อเพิ่มconsole.trace();สิ่งที่เรียกฟังก์ชั่นซึ่งกำลังโยนข้อผิดพลาดในคอนโซล ทำตามโซ่ที่คุณโหลดสิ่งที่ไม่ถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.