Weiß jemand, wie alle JS-Skript-Tags von Magento, z. B. <script type="text/javascript" src="http://sitename.com/js/prototype/prototype.js"></script>
vor dem Schließen, gerendert werden können </body>
?
Ich habe es schon einmal versucht, aber mir wurde ein Fehler gemeldet, der meiner Meinung nach im Sinne der addJS-Methode dort, wo ich ihn verwendet habe, möglicherweise in der Referenzfußzeile, nicht verfügbar war.
magento-1
performance
theme
layout
javascript
Mark Weston
quelle
quelle
Antworten:
Das hängt von Ihrer Anfrage ab. Zuletzt hatte ich zum Beispiel alle Prototype-Skripte aus
Homepage
dem Magento-Store entfernt, auf die ich keine Probleme hatte. Aber wie gesagt, es kommt auf dein Theme, Erweiterungen etc. anSo verschieben Sie das Skript:
Suchen Sie die folgende Zeile in
page.xml
Ihrem ThemaUnd fügen Sie kurz davor Folgendes ein:
Verwenden Sie für Magento 1.9 Folgendes:
Erstellen Sie die Vorlagendatei in app / design / frontend / [package] / [theme] /template/page/html/jsfooter.phtml und fügen Sie Folgendes hinzu
Fügen Sie dies in Ihre Vorlage ein, bevor Sie das
</body>
Tag schließen .quelle
core/text_list
es eineaddJs()
Methode gibt?Beim Verschieben des Tags treten zwei Probleme auf. Das größte Problem ist, dass Magento aus irgendeinem Grund eine Menge JS, das vom Prototyp abhängig ist, direkt in das
<body/>
Tag einfügt. Wenn Sie die Skripte an das Ende des Dokuments verschieben (obwohl dies für die Ladezeiten von Vorteil ist), werden viele Seiten in Magento beschädigt.Das andere Problem macht es tatsächlich. Es scheint kein
<move />
Tag oder eine ähnliche Funktionalität zu geben. Was ich für benutzerdefinierte Skripte getan habe, die ich erstellt habe, ist das Hinzufügen von Skripten wie folgt. Es ist redundanter, aber es funktioniert:quelle
In Magento 1.x ist dies ein Kinderspiel. Es gibt einfach zu viele Inline-Skripte in den Vorlagendateien in Magento, die beschädigt werden, wenn Sie die JS-Kerndateien aus der verschieben
<head>
. Möglicherweise ändert sich diese Situation in Magento 2, aber sie erstreckt sich über Prototype und jQuery, während Magento von Prototype migriert.Bei anderen Skripten sollten Sie sie vor dem
</body>
Element platzieren. Ich fand es hilfreich, Magentos zu ignorieren<action method="addJS|addItem">
XML und einfach eine neue Vorlagendatei für jedes Skript zu erstellen, die eine einfache HTML-Skriptreferenz wie die folgende enthält:Dann können Sie diese Vorlagendatei an einer beliebigen Stelle einbetten (und trotzdem vorher / nachher verwenden, um die Reihenfolge zu steuern):
quelle
In den meisten Fällen reicht es nicht aus, externes JavaScript nach unten zu verschieben. Wenn Sie Vorlagen mit Inline-JavaScript wie in den Standardthemen verwenden, müssen Sie deren Ausführung verzögern, bis alle Abhängigkeiten (prototype.js, varien.js, ...) geladen sind.
Ein Ansatz besteht darin, alle Inline-
<script>
Elemente aus gerenderten Blöcken mit einem Beobachter für zu extrahierenhttp_response_send_before
und sie direkt nach den externen Skripten an das Ende zu verschieben. Während Sie gerade dabei sind, können Sie alle Skriptelemente verschieben, nicht nur Inline. Dies erspart Ihnen das mühsame Verschieben über das Layout-Modell, das von Magento eindeutig nicht vorgesehen war.Tom Robertshaw hat eine Erweiterung erstellt, die genau dies tut. Ein einzelner Beobachter ändert den Antwort-HTML-Code mithilfe regulärer Ausdrücke: https://github.com/bobbyshaw/magento-footer-js
Er verwendet das
core_block_abstract_to_html_after
Ereignis, ergreift jedoch nur dann Maßnahmen, wenn der aktuelle Block der Stammblock ist. Dies bedeutet, dass der Beobachter häufiger angerufen wird, jedoch das Block-Caching in gewissem Maße nutzen sollte.quelle
</body>
Tag nach unten .Ich empfehle dringend das mediarox Pagespeed-Modul, um Ihnen dabei zu helfen, Ihr Javascript (und CSS) zu optimieren und das Google Pagespeed Insight-Ranking zu verbessern.
Es funktioniert, indem es die HTML-Ausgabe von Magento analysiert und dann eine Aktion zum Ausschneiden und Einfügen des Codes ausführt, um Javascript an den unteren Rand des HTML-Codes zu verschieben. Der Vorgang ist schnell, wird jedoch am besten in Verbindung mit einem Ganzseiten-Cache verwendet, um die HTML-Änderungen zwischenzuspeichern.
Weitere Informationen zur Funktionsweise dieses Moduls und zur Verbesserung des Pagespeed-Rangs finden Sie hier:
http://blog.gaiterjones.com/magento-google-pagespeed-jscsshtmlminify-optimisation/
quelle
Für Magento v1.6 + (muss in älteren Versionen getestet werden);
1 - Erstellen Sie eine Vorlagendatei
page/html/footer/extras.phtml
mit folgendem Inhalt:2 - Fügen Sie diesen HTML-Knoten zu Ihrer Layout-XML hinzu:
3 - Das ist es!
quelle
Aufgrund eines Problems mit diesem anderen Skript (in product / list.phtml) musste
<script type="text/javascript"> decorateList('category-list', 'none-recursive') </script>
ich einige JS am Ende meiner Seite verschieben.Ich konnte die oben angegebenen Ergebnisse nicht verarbeiten, sodass ich einen anderen Weg finde, um Folgendes zu erreichen:
Ich überschreibe das,
Mage/page/Block/Html/Footer.php controller
indem ich es mit dem gleichen Pfad in neu erstelleapp/local folder
.Hier ist der vollständige Pfad, der erstellt werden soll, wenn er nicht vorhanden ist:
In dieser Datei füge ich Funktionen aus Head.php hinzu, die sich im selben Ordner wie Magentos Kern befinden (zB Mage / page / Block / Html / Head.php).
Die Funktionen, die Sie benötigen, um zu funktionieren, sind (offensichtlich die vollständige Funktion, hier gebe ich nur den Namen an, um präzise zu bleiben):
Dann füge ich zu meiner benutzerdefinierten (der in meinem Thema) Seite / html / footer.phtml den folgenden Aufruf hinzu:
Am Ende kann ich jetzt JS in meine Fußzeile einfügen, indem ich es in einem beliebigen Layout von aufrufe
quelle