Shop5
Die Funktionsweise Javascript über loadjs zu laden, funktioniert immer noch, aber es gibt im Shop5 inzwischen einen einfacheren Weg.
Inline Scripts
Wenn Sie ein Inline-Skript einfügen wollen, das jQuery oder eine andere vom Template geladene Library verwendet, dann können Sie die vom JTL-Shop 5 zu Verfügung gestellte {inline_script} Smarty-Funktion verwenden.
- {inline_script}
- <script>
- /* javascript code ... */
- </script>
- {/inline_script}
Wichtig zu wissen ist hier allerdings, dass das Script base64 enkodiert wird und im Source Code nicht mehr lesbar ist. Die Developer Tools können es aber schon noch debuggen.
Chrome: Sources Tab > (no domain) in der linken Sidebar
Firefox: Debugger Tab > (no domain) in der linken Sidebar
Laden von Javascript Files
Laden sie Javascript Files am besten mit dem defer Attribut. Das File wird sofort asynchron geladen, aber erst wenn das Dokument fertig geladen ist, ausgeführt. Dadurch wird das Parsen des HTML Dokuments nicht blockiert und die Reihenfolge der Skripte wird bei der Ausführung auch berücksichtigt.
- <script src="script.js" defer></script>
Wenn Ihr Skript-Tag nach den im Head vom Template geladenen Libraries steht und defer verwendet, dann können diese in ihrem Skript auf jeden Fall alle verwenden.
Ohne defer kann es zum Beispiel zu Fehlern wie "jQuery is undefined" kommen.
Shop4
Ab Version 1.14 werden die mit dem admorris Pro Template mitgelieferten Skripte asynchron geladen. Es gibt auch eine neue Option, welche es ermöglicht jQuery asynchron zu laden. Wir verwenden dafür die Library LoadJS. Weiter unten folgt noch eine Anleitung, wie Sie Libraries, die Sie selbst in Ihren Shop einbauen möchten, damit laden können, um das Rendern der Webseite im Browser nicht durch das Laden und Parsen des Javascript Codes zu blockieren.
Verwenden von JS Libraries des Templates
Wenn Sie in einem eigenen Skript eine der Libraries (z.B.: Bootstrap, Slick Slider) verwenden möchten, sei es in einem Element oder im Child Template, dann müssen Sie folgendes beachten:
In Ihren Code muss in eine Callback-Funktion in loadjs.ready() eingefügt werden. Für die vom Template geladenen Skripte wurde der Name 'template-scripts' vergeben. Mit dem folgenden Code wird mit der Ausführung so lange gewartet, bis die vom Template zu Verfügung gestellten Skripte fertig geladen wurden.
- loadjs.ready('template-scripts', function() {
- $(document).ready(function(){
- /*... hier Code einfügen ...*/
- });
- });
jQuery Code mit der jQuery asynchron laden Option
Wenn Sie in Ihrem Skript jQuery verwenden, aber keine Javascript Libraries des Templates verwenden und die Funktion “jQuery asynchron laden” verwenden möchten, beachten Sie bitte Folgendes:
Mit der zu Verfügung gestellten {jqueryReady} Smarty Block-Funktion wird bei aktivierter “jQuery asynchron laden” Option automatisch die loadJS Callback-Funktion erstellt.
- {jqueryReady}
- ... hier Code einfügen ...
- {/jqueryReady}
Die Smarty Block-Funktion gibt dann folgendes aus. Wenn “jQuery asynchron laden” deaktiviert ist wird nur der Inhalt zurückgegeben.
- loadjs.ready('jQuery', function() {{...ihr Code...}});
Javascript Libraries asynchron laden
Um eigene Javascript Libraries hinzuzufügen, empfehlen wir ein Child zu verwenden und dort die Dateien abzulegen, damit sie bei Updates des Templates nicht wieder entfernt werden.
In diesem Beispiel wird die Library direkt in der Callback-Funktion verwendet:
- <script>
loadjs('templates/admorris_pro_child/js/javascriptLib.js', function() {
... Code zur Verwendung der Library hier einfügen ...
});
- </script>
Es ist auch möglich eine ID zu vergeben und an einer anderen Stelle loadjs.ready zu verwenden:
- <script>
- loadjs('templates/admorris_pro_child/js/javascriptLib.js', 'name-der-id');
- </script>
- <script>
- loadjs.ready('name-der-id', function() {
- ... Code zur Verwendung der Library hier einfügen ...
- });
- </script>
Weitere Informationen zur Verwendung von LoadJS finden sie hier:
Libraries die JQuery verwenden, müssen bei aktivierter "jQuery asynchron laden"-Option wie weiter oben schon beschrieben innerhalb eines {jqueryReady}-Blocks asynchron geladen werden.