jQuery neben Prototype in Zikula einsetzen

in  Basics , ,

jQuery neben Prototype in Zikula einsetzen

In Zikula 1.3.x sind jQuery und jQuery UI bereits enthalten. Allerdings verwenden viele Module noch Prototype, was dazu führt, dass beide Skripte parallel nebeneinander verwendet werden. Dieser Artikel zeigt auf, welche Konsequenzen dies für die Nutzung mit sich bringt und wie man jetzt schon ohne Probleme mit jQuery arbeiten kann.

Skripte via PageVar laden

Statt mit Pfaden und Dateinamen hantieren zu müssen, können oft benötigte Skripte in Zikula einfach mittels PageVars geladen werden. Um beispielsweise jQuery und jQuery UI in einem Rutsch einzubinden, genügt die folgende Zeile im Template:

{pageaddvar name='javascript' value='jquery,jqueryui'}

Der Kompatibilitätsmodus von jQuery

Da sowohl Prototype als auch jQuery das Dollarzeichen für Funktionen verwenden, gibt es Probleme, wenn beide Skripte gleichzeitig geladen werden. Daher wird in Zikula beim Laden von jQuery direkt der sogenannte “NoConflict-Modus” eingeschaltet. Dieser tut an sich nichts weiter außer die Selektionsfunktionalität, welche jQuery normalerweise mit dem Dollarzeichen verbindet, zusätzlich über das Alias jQuery bereitzustellen. Die beiden folgenden Beispielselektoren und Befehle sind daher als identisch zu betrachten:

1
2
3
4
<script>
    $('#mynavigation li a').attr('target', '_blank');
    jQuery('#mynavigation li a').attr('target', '_blank');
</script>

Wenn man das Alias statt dem Dollarzeichen verwendet, kann man bereits mit jQuery arbeiten, auch wenn Prototype zusätzlich geladen wurde. Allerdings gibt es noch eine andere Möglichkeit, die bevorzugt angewendet werden sollte.

Funktionen an jQuery binden

Es ist möglich, den JavaScript-Code von einer anonymen Funktion ummanteln zu lassen. Damit kann man definieren, dass das Dollarzeichen innerhalb dieser Funktion zu jQuery und nicht zu Prototype gehört. Ein schöner Nebeneffekt dieser Vorgehensweise ist, dass der Code so auch direkt weiter für Zikula 1.4.0 verwendet werden kann.

1
2
3
4
5
6
<script>
    (function($) {
        $('#myelement').hide();
        $('#mynavigation li a').attr('target', '_blank');
    })(jQuery)
</script>

Weitere Details dazu lassen sich im Core-Projekt auf GitHub nachlesen.

Weitere Beiträge in Kategorie Basics

Einfaches JS-Management mit ImportMaps in neuer Symfony AssetMapper-Komponente
- Im Symfony-Ökosystem werden Frontend-Komponenten seit einiger Zeit zunehmend über UX-Komponenten verarbeitet. Auch wenn hierdurch einige Anbelange vereinfacht werden, ist doch oftmals der Aufbau einer …
Symfony UX im Kontext von ModuleStudio
- Stimulus und Symfony UX Ein JavaScript-Ökosystem für Symfony wurde bereits Ende 2020 gestartet. Vereinfacht ausgedrückt wurde Symfony Flex erweitert, um auch JavaScript-Anteile in einem Bundle leicht …
Das Buch zu Symfony ist in einer neuen Version erschienen
- Bereits im Jahr 2020 haben wir das Buch “Symfony: The Fast Track” hier vorgestellt. Nun ist eine neue Auflage bereitgestellt worden, welche auf den Stand für Symfony 5.4 und 6.0 gebracht …
Symfony und API Platform starten offiziellen Docker-Support
- Seit knapp einem Monat steht eine umfangreiche Unterstützung zur Docker-basierten Arbeit mit Symfony bereit. Hierbei gibt es Neuerungen in mehreren zentralen Werkzeugen, die ineinander greifen und …
Optische Varianzen mit SCSS-Maps umsetzen
- In vielen Weblayouts ist es notwendig, unterschiedliche Ausprägungen einer bestimmten kosmetischen “Stellschraube” zu realisieren. So können etwa einzelne Akzentfarben je nach Unterseite, …