(Bitte korrigiert mich, wenn ich Blödsinn schreibe)
Einige Funktionen in phpwcms benötigen die MooTools. Zum Beispiel das Ein-/Ausblenden der Frontend-Edit-Buttons oder auch die lightbox. Das Core von phpwcms bindet den benötigten MooTools-Kern und die entsprechenden MooTools JavaScripte automatisch ein.
Es macht nun Sinn, nur MooTools basierte JS zu verwenden, da erstens nur der MooTools-Kern geladen werden muss (Zeitersparnis) und Konflikte mit anderen JS-Frameworks werden vermieden. Doch möchte man gerne auch JavaScripte basierend auf anderen Frameworks (z.B. jQuery) in einer phpwcms-Installation laufen lassen, was aber in den meisten Fällen die MooTools ausser Funktion setzt.
Wie entsteht der Konflikt zwischen zwei Frameworks?
Das $-Zeichen dient als Referenz zwischen Framework und JavaScript. Da die meisten JS-Frameworks das $-Zeichen als Referenz benutzen, treten zwangsläufig Konflikte ein. Man kann sich das in etwa so vorstellen: Framework = Fernsteuerung, Skript = Modellflugzeug, $-Zeichen = Frequenz. Sind nun zwei Hobbypiloten zur gleichen Zeit am Fliegen und haben die gleiche Frequenz in der Fernsteuerung eingestellt, wird eines der beiden Flugzeuge abstürzen.
Lösung
An guten Fernsteuerungen kann man die Frequenz umstellen, was zum Beispiel sehr hilfreich bei Modellflug-Wettbewerben ist. Und glücklicherweise, lässt sich auch im jQuery Framework die Frequenz umstellen. Kein Konflikt mit MooTools. Das ist ein grosser Vorteil von jQuery.
Vorgehen
Diese "Frequenzumstellung" funktioniert nur, wenn jQuery NACH den MooTools ins phpwcms-Template geladen wird, was bei phpwcms automatisch gegeben ist.
Also werden im HEAD-Bereich des Templates der benötigte jQuery-Kern und danach die jQuery-Skripte eingelsen. Wie zum Beispiel hier (kern + cycle + slideshow):
Code: Select all
<script type="text/javascript" src="template/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="template/js/jquery.cycle.js"></script>
<script type="text/javascript" src="template/js/slideshow.js"></script>
a) in die externen jQuery-JS (hier ind den Dateien "jquery.cycle.js" und "slideshow.js") oder
b) in die Header-jQuery-JS (keine im Beispiel vorhanden) oder
c) in die Body-jQuery-JS (keine im Beispiel vorhanden).
in meinem Beispiel möchte ich die $-Variabel mit einer eigenen ersetzen, die "jQuery" lauten soll.
Man öffnet also das JavaScript in einem Texteditor und fügt ganz am Anfang ein:
Code: Select all
jQuery.noConflict();
Speichern... Fertig
Grüsse aus Singapore
Ralph