Bewertung: 0 / 5

Stern inaktivStern inaktivStern inaktivStern inaktivStern inaktiv
 

Problembeschreibung

Manche Komponenten in Joomla nutzen MooTools, andere und mittlerweile das Joomla selbst verwenden jQuery. Es kann passieren, dass beide JavaScript-Frameworks geladen werden. Das führt jedoch häufig zu Konflikten, weil beide Frameworks den Kurzbezeichner $ verwenden um angesprochen zu werden. Grundsätzlich ist das in Joomla längst kein Problem mehr, selbst dann wenn man beide Frameworks gleichzeitig nutzen will. Zum einen ist gebräuchlich eine jQuery-Methode namen noConflict() einzubinden und zu nutzen. Zum anderene ist es notwendig diese dazu in der korrekten Reihenfolge zu laden. Dies verhindert Konflikte im gleichen Namensraum.

Aber darum muss sich nicht jede Komponente oder der Webmaster der Seite mehr selbst kümmern. Dafür hat Joomla schon diverse Methoden zur Verfügung gestellt, die das korrekte Handling sicherstellen. Wichtig ist nur, dass die Komponte, die z.B. jQuery verwenden will, zur Sicherheit diese Joomla-Methoden verwendet - zum einen das Einbinden der Frameworks über die Klasse JHtml::_(...) und zum anderen die evtl. notw. Reihenfolge und Konfliktvermeidung JHtml::_('behavior.framework', true);.

Jedoch scheint es noch einen kleinen Nachteil zu geben, der sich bei mir konkret z.B. bei der Verwendung von BreezingForm-Formularen zeigte: BF verwendet jQuery jedoch nicht MooTools, will aber verhindern, dass es bei der gleichzeitigen Nutzung von Mootools durch andere Komponenten mit dem notw. jQuery zu Konflikten kommt, und ruft deshalb in allen Scripten die BFQuickMode*.php heißen auch die Methode behavior.framework() auf. Dadurch wird jedoch MooTools geladen, auch dann wenn es eigentlich durch gar keine Komponente oder BF genutzt wird. Zum einen ist das schlecht für die Performance, wenn ungenutzte Scripte sinnlos geladen werden, zum anderen kann das Laden von Mootools überhaupt erst wieder eine Störquelle schaffen.

 

Lösung

Um also zu verhindern, dass eine Komponente so auch BreezingForms MooTools unnütz lädt, muss in den Scripten nach o.g. Zeile JHtml::_('behavior.framework', true); gesucht werden und diese auskommentiert werden. Leider betrifft das - wie in BreezingForms die genannten BFQuickMode*.php-Scripte - durchweg Core-Scripte. Diese Modifikationen sind also in dem Wissen vorzunehmen, dass diese Scripte mit dem nächsten Komponenten-Update wieder überschrieben werden könnten.



Eine Alternative wäre, ein eigenes Plugin zu programmieren, welches aus dem Array der durch Joomla einzubindenden Frameworks und Scripte die wieder herauslöscht, die unerwünscht sind. Das wäre eine Lösung die sicher vor Updates ist. Ein solches "unloadScripts"-Joomla-Plugin habe ich mal programmiert, um das lästige mootools in BreezingForms los zuwerden.

Als Anhang zu diesem Beitrag habe ich das Script zum Download beigefügt. Bitte beachten! Die Nutzung erfolgt auf eigene Gefahr!
Ist sicher auch für andere Problemfälle geeignet, zumal es nicht nur MooTools entfernen kann, sondern auch beliebig andere störende Scripte.

Anhänge:
Diese Datei herunterladen (plg-unloadscripts.zip)Joomla-Plugin unloadScripts[Mit diesem Plugin können durch Komponenten unnötig geladene Scripte (wie z.B. das Mootools-Framework) wieder aus dem Siteheader entfernt werden, bevor die Seite gerendert wird.]3 kB

Kommentare (0)

Bisher wurden hier noch keine Kommentare veröffentlicht

Einen Kommentar verfassen

Kommentar als Gast veröffentlichen. Registriere Dich oder melde Dich zu Deinem Benutzerkonto an.
0 Zeichen
Anhänge (0 / 3)
Deinen Standort teilen
Gib den Text aus dem Bild ein. Nicht zu erkennen?