Czy ktoś wie, jak wszystkie znaczniki skryptu JS Magento były <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
renderowane np. Przed zamknięciem </body>
?
Próbowałem już raz, ale dostałem błąd, który według mnie był zgodny z metodą addJS, która nie była dostępna tam, gdzie go użyłem, być może w stopce referencyjnej.
magento-1
performance
theme
layout
javascript
Mark Weston
źródło
źródło
Odpowiedzi:
To zależy od twojego żądania. Na przykład usunąłem wszystkie skrypty Prototypów ze
Homepage
sklepu Magento, z którymi nie miałem żadnych problemów. Ale jak powiedziałem, zależy to od twojego motywu, rozszerzeń itp.Aby przenieść skrypt:
Znajdź następujący wiersz w
page.xml
swoim motywieI wstaw następujące przed chwilą:
W przypadku Magento 1.9 użyj tego:
Utwórz plik szablonu w app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtml i umieść następujące
Dodaj poniżej w swoim szablonie tuż przed zamknięciem
</body>
tagu.źródło
core/text_list
maaddJs()
sposobu?Istnieją dwa problemy z przenoszeniem znacznika. Największym problemem jest to, że z jakiegoś powodu Magento wstrzykuje dużą ilość JS, która zależy od prototypu bezpośrednio do
<body/>
znacznika. Przeniesienie skryptów na koniec dokumentu (choć dobre dla czasów ładowania), spowoduje uszkodzenie wielu stron w Magento.Innym problemem jest robienie tego. Wygląda na to, że nie ma
<move />
tagu ani podobnej funkcjonalności. To, co zrobiłem dla niestandardowych skryptów, które utworzyłem, to dodawanie takich skryptów. Jest bardziej zbędny, ale działa:źródło
W Magento 1.x jest to zadanie głupca. W plikach szablonów w Magento jest po prostu zbyt wiele skryptów wbudowanych, które ulegną awarii, jeśli przeniesiesz podstawowe pliki JS z
<head>
. Potencjalnie w Magento 2 sytuacja ulegnie zmianie, ale stoi ona na granicy Prototypu i jQuery, gdy Magento migruje z Prototypu.W przypadku innych skryptów należy umieścić je przed
</body>
elementem. Pomocne jest zignorowanie<action method="addJS|addItem">
kodu XML Magento i po prostu utworzenie nowego pliku szablonu dla każdego skryptu, który zawiera zwykłe odniesienie do skryptu HTML, takie jak:Następnie możesz osadzić ten plik szablonu w dowolnym miejscu (i nadal używać przed / po do sterowania kolejnością) w następujący sposób:
źródło
Przeniesienie zewnętrznego JavaScript na dół w większości przypadków nie wystarczy. Jeśli używasz szablonów z wbudowanym JavaScript, tak jak w domyślnych motywach, musisz opóźnić ich wykonanie do momentu załadowania wszystkich zależności (prototype.js, varien.js, ...).
Podejście polega na wyodrębnieniu wszystkich
<script>
elementów wbudowanych z renderowanych bloków za pomocą obserwatorahttp_response_send_before
i przeniesienie ich do końca zaraz po zewnętrznych skryptach. W tym momencie możesz przenosić wszystkie elementy skryptu, nie tylko wbudowane. To oszczędza kłopotów z przenoszeniem ich za pomocą modelu układu, co wyraźnie nie było zamierzone przez Magento.Tom Robertshaw stworzył rozszerzenie, które robi dokładnie to, z jednym obserwatorem, który zmienia odpowiedź HTML za pomocą wyrażeń regularnych: https://github.com/bobbyshaw/magento-footer-js
Używa
core_block_abstract_to_html_after
zdarzenia, ale podejmuje działanie tylko wtedy, gdy bieżący blok jest blokiem głównym. Oznacza to, że obserwator jest nazywany częściej, ale powinien w pewnym stopniu wykorzystywać buforowanie bloków.źródło
</body>
tagiem zamykającym .Bardzo polecam moduł mediarox Pagespeed, aby pomóc Ci zoptymalizować javascript (i css) i poprawić ranking wglądu w Google Pagespeed.
Działa poprzez parsowanie danych wyjściowych HTML przez Magento, a następnie wykonanie operacji wycięcia i wklejenia kodu, aby przenieść javascript na dół kodu HTML. Proces jest szybki, ale najlepiej go używać w połączeniu z pełną pamięcią podręczną strony, aby buforować zmiany HTML.
Więcej informacji o tym, jak działa ten moduł i które mogą pomóc Ci poprawić pozycję strony:
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
źródło
Dla Magento v1.6 + (trzeba przetestować w starszych wersjach);
1 - utwórz plik szablonu
page/html/footer/extras.phtml
z tą zawartością:2 - Dodaj ten węzeł HTML do swojego układu xml:
3 - To jest to!
źródło
Z powodu problemu z tym innym skryptem (w produkcie / list.phtml)
<script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
musiałem przenieść JS na końcu mojej strony.Nie byłem w stanie sprawić, aby powyższe wskazania zadziałały, dlatego znalazłem inny sposób na osiągnięcie:
Zastępuję
Mage/page/Block/Html/Footer.php controller
, odtwarzając go z tą samą ścieżką wapp/local folder
.Oto pełna ścieżka do utworzenia, jeśli nie istnieje:
W tym pliku dodaję funkcje z Head.php, które można znaleźć w tym samym folderze rdzenia Magento (tj. Mage / page / Block / Html / Head.php).
Funkcje, które musisz zrobić, aby działały (oczywiście pełna funkcja, tutaj po prostu wskazuję nazwę, aby pozostać zwięzła):
Następnie dodaję do mojej niestandardowej (tej w moim motywie) stronie / html / footer.phtml wywołanie tego:
Na koniec mogę teraz dodać JS w stopce, wywołując ją w dowolnym układzie przez
źródło