Помилка перемикача Magento 2 в "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 нормально, але при натисканні я отримую таку помилку:

section-config.js: 33 Uncaught TypeError: Неможливо прочитати властивість '*' undefined (…)

Створений 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?
Ракеш Єсадія

nope XD Я зроблю це і продовжу
davideghz

Я просто побіг sudo php bin/magento setup:static-content:deployбез удачі. Чому потрібно видалити varпапку? Що саме потрібно видалити?
davideghz

ви повинні видалити весь вміст папки var
Rakesh Jesadiya

1
@davideghz Ви отримали рішення?
Мохаммед Муджассам

Відповіді:


14

У мене була така ж проблема і з'ясувалося, що ці два блоки, де більше не викликаються через налаштування в темі.

Два блоки за замовчуванням додаються у <referenceContainer name="content">vendor / 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"/>

У мене така ж проблема, але блоки надаються. Я думаю, це тому, що я перебуваю в методі RequJs під час виклику методу перезавантаження кошика, але 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['*'])) : {};

Насправді повертає порожній масив, коли жоден розділ не впливає.


Чи добре працює ваше рішення?
Джаред Чу

1
Так, це було вирішенням функціонування, але IIRC, справжній корінь нашої проблеми, був врешті-решт незначним зловживанням API JS. Це виправлення не зробило невідповідним, це все ще захист, щоб забезпечити, що код продовжує працювати і не зупиняється тут, у не критичних випадках помилок.
Флінт

1
Дякую, це працює ..
Раві Соні

Це працює і для мене. Але в деяких категоріях, коли я змінюю подання магазину, після зміни представлення магазину я отримую недійсний ключ форми. Оновіть сторінку. Жодної форми немає, хоча .... я плутаюся
GG

0

Ран з того ж питання , навіть якщо customer.section.configі customer.customer.dataбули правильно завантажені в сторінку.

У моєму випадку, проте, це сталося тому, що розширення намагалося запустити перезавантаження секції занадто рано (перш ніж section-config.js був завантажений правильною конфігурацією).

Вдалося вирішити це шляхом додавання точки getAffectedSectionsперелому в section-config.js і перевірки змінної URL. Потім перемістили розширення JS для завантаження після блоку 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>

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, щоб дізнатись, де сталася помилка, а потім безпосередньо до цього файла у вашому локальному розробнику додайте console.trace();виклик, щоб встановити, що викликає функцію, яка кидає помилку в консолі. Слідкуйте за ланцюжком, куди ви неправильно завантажуєте речі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.