Implementuję niestandardowy przełącznik sklepu w moim niestandardowym motywie.
Szablon bloku wygląda następująco:
<?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; ?>
Link do nowego sklepu jest wyświetlany poprawnie, więc chyba plik XML jest OK, ale po kliknięciu pojawia się następujący błąd:
section-config.js: 33 Uncaught TypeError: Nie można odczytać właściwości „*” niezdefiniowanej (…)
Wygenerowany html
wygląda następująco:
<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>
magento2
magento-2.1
blocks
javascript
store-switcher
davideghz
źródło
źródło
sudo php bin/magento setup:static-content:deploy
bez szczęścia. Dlaczego mam usunąćvar
folder? Co dokładnie powinienem usunąć?Odpowiedzi:
Miałem ten sam problem i dowiedziałem się, że te dwa bloki nie zostały już wywołane z powodu dostosowań w motywie.
Dwa bloki są domyślnie dodawane w
<referenceContainer name="content">
pliku vendor / magento / module-customer / view / frontend / layout / default.xml.Spróbuj ponownie dodać te bloki w pliku layout.xml:
źródło
W naszym projekcie naprawiliśmy to w
section-config.js
pliku w metodziegetAffectedSections
(gdzie był nasz błąd).Zastąpiliśmy ostatnią linię:
Przez następujące:
Faktycznie zwraca pustą tablicę, gdy nie ma to wpływu na sekcję.
źródło
Natknąłem się na ten sam problem, mimo że
customer.section.config
icustomer.customer.data
zostały poprawnie załadowane na stronę.W moim przypadku stało się tak, ponieważ rozszerzenie próbowało zbyt wcześnie uruchomić sekcję przeładowywania sekcji (zanim sekcja-config.js została załadowana z prawidłową konfiguracją).
Udało się go rozwiązać, dodając punkt przerwania w
getAffectedSections
pliku section-config.js i sprawdzając zmienną url. Następnie przeniesiono rozszerzenie JS, aby załadować po bloku customer.section.config:źródło
W naszym przypadku był to fragment kodu w domyślnym szablonie, który ładował plik client-data.js po wywołaniu go już na stronie powodzenia.
Znaleziono plik:
vendor/magento/module-checkout/view/frontend/templates/success.phtml
ładował ten kod:
Usunięcie tego kodu naprawiło go, co zrobiliśmy, tworząc kopię tego pliku w naszym katalogu szablonów motywów i usuwając niepoprawny fragment kodu.
Możesz użyć narzędzi Chrome Dev, aby dowiedzieć się, gdzie wystąpił błąd, a następnie bezpośrednio w tym pliku w lokalnym urządzeniu deweloperskim dodać
console.trace();
wywołanie, aby ustalić, co wywołało funkcję, która powoduje błąd w konsoli. Podążaj za łańcuchem do niewłaściwego ładowania rzeczy.źródło