Sollte zuerst die Überprüfung in Javascript durchführen. zum Beispiel:
%Vor%Dann könnten Sie eine Nachricht von ajax an den Server senden.
Gibt es eine Möglichkeit zu überprüfen, ob jQuery mit PHP geladen wird?
Ich habe zwei verschiedene Plugins in Joomla, die jQuery JS laden, aber wenn es mehr als einmal enthalten ist, funktioniert es nicht richtig.
Um den Prozess ein bisschen mehr zu erklären: Joomla bietet die Möglichkeit, die HTML-Quelle vor dem Rendern abzufangen, und arbeitet im Wesentlichen am Quelltext selbst.
Dies verwendet die Funktion:
%Vor%$ row ist der HTML-Inhalt der Seite, die geparst werden kann.
Ich dachte, dass vielleicht ein preg_match funktionieren könnte, aber nicht viel Erfahrung damit hat.
Ich gehe davon aus, dass Sie Joomla1.0 verwenden?
Joomla puffert Inhalte mit dem PHP-Ausgabepuffer. zB: ob_start ().
Sie können den Inhalt mit: ob_get_contents ();
abrufenSie können also einen regulären Ausdruck haben, der nach JQuery sucht. Etwas wie:
%Vor%sollte gut genug sein. (Ich habe das nicht getestet).
Die Verwendung von ob_get_contents () funktioniert möglicherweise nicht in Situationen, da der PHP-Ausgabepuffer geschachtelt werden kann. Sie können so viele Puffer innerhalb von Puffern starten.
Für Joomla1.5 können Sie den Puffer über die API erhalten, die sicherstellt, dass Sie immer Joomla-Ausgabe erhalten.
%Vor%Ob Joomla1.0 oder 1.5, Sie müssen beachten, dass Joomla jederzeit zu dem Puffer hinzufügen kann, bevor es die Ausgabe rendert (ruft ob_flush () oder gleichwertig auf). Daher muss bei der Prüfung auf JQuery berücksichtigt werden, dass JQuery nach der Prüfung geladen werden kann.
Beachten Sie, dass der Joomla-Puffer nicht nur für HTML, sondern auch für CSS, JavaScript, XML, JSON usw. erstellt wird. Sie sollten also vor der Durchführung von JQuery-Tests nach HTML suchen. Sie können auch für das Admin-Panel testen.
%Vor%Als Referenz hier ist ein Beispiel System-Plugin, das teilweise die Dinge tut, die Sie wollen. Es ist ein Kompatibilitäts-Plugin für MooTools1.2.
%Vor%Besser noch, Sie können es mit JavaScript verifizieren und es dann zum Kopf hinzufügen, wenn es fehlt.
%Vor%Ich gehe davon aus, dass Sie Joomla1.0 verwenden?
Joomla puffert Inhalte mit dem PHP-Ausgabepuffer. zB: ob_start ().
Sie können den Inhalt mit: ob_get_contents ();
abrufenSie können also einen regulären Ausdruck haben, der nach JQuery sucht. Etwas wie:
%Vor%sollte gut genug sein. (Ich habe das nicht getestet).
Die Verwendung von ob_get_contents () funktioniert möglicherweise nicht in Situationen, da der PHP-Ausgabepuffer geschachtelt werden kann. Sie können so viele Puffer innerhalb von Puffern starten.
Für Joomla1.5 können Sie den Puffer über die API erhalten, die sicherstellt, dass Sie immer Joomla-Ausgabe erhalten.
%Vor%Ob Joomla1.0 oder 1.5, Sie müssen beachten, dass Joomla jederzeit zu dem Puffer hinzufügen kann, bevor es die Ausgabe rendert (ruft ob_flush () oder gleichwertig auf). Daher muss bei der Prüfung auf JQuery berücksichtigt werden, dass JQuery nach der Prüfung geladen werden kann.
Beachten Sie, dass der Joomla-Puffer nicht nur für HTML, sondern auch für CSS, JavaScript, XML, JSON usw. erstellt wird. Sie sollten also vor der Durchführung von JQuery-Tests nach HTML suchen. Sie können auch für das Admin-Panel testen.
%Vor%Als Referenz hier ist ein Beispiel System-Plugin, das teilweise die Dinge tut, die Sie wollen. Es ist ein Kompatibilitäts-Plugin für MooTools1.2.
%Vor%Sollte zuerst die Überprüfung in Javascript durchführen. zum Beispiel:
%Vor%Dann könnten Sie eine Nachricht von ajax an den Server senden.
Gibt es eine Möglichkeit zu überprüfen, ob jQuery mit PHP geladen wird?
Ich habe zwei verschiedene Plugins in Joomla, die jQuery JS laden, aber wenn es mehr als einmal enthalten ist, funktioniert es nicht richtig.
Um den Prozess ein bisschen mehr zu erklären: Joomla bietet die Möglichkeit, die HTML-Quelle vor dem Rendern abzufangen, und arbeitet im Wesentlichen am Quelltext selbst.
Dies verwendet die Funktion:
%Vor%$ row ist der HTML-Inhalt der Seite, die geparst werden kann.
Ich dachte, dass vielleicht ein preg_match funktionieren könnte, aber nicht viel Erfahrung damit hat.
Das ist nicht möglich. PHP ist serverseitig, während Javascript (die Sprache, in der JQuery geschrieben wird) clientseitig ist. PHP-Code muss inhärent ausgeführt werden, bevor der Text, der das Javascript enthält, auch an den Benutzer gesendet und versucht wird, geladen zu werden.
Am besten ist es, jQuery nicht mehr als einmal zu verwenden. Sie können dies tun, indem Sie alle Ihre Includes durch etwas ersetzen:
%Vor%Zugegeben, das ist ein bisschen ein Hack, und es könnte einen besseren Weg geben.
EDIT: Nach ein wenig Überlegung: Dies funktioniert möglicherweise nicht einmal wegen der Asynchronität des Ladens der jQuery-Bibliothek vom Server. Es scheint, als wäre der beste Weg dies zu tun mit einem %code% Event-Handler, der an das Script-Include angehängt ist, aber das DOM unterstützt das nicht.
BEARBEITEN SIE 2: Okay, jetzt denke ich, dass Ihre beste Wette wäre, es einfach einmal in die Seite mit nur einem Skript-Tag pro Seite aufzunehmen. Sie könnten dies tun, indem Sie es zu einem globalen Header irgendeiner Art hinzufügen und dann überallhin entfernen. Dann, egal was, nicht wieder einbeziehen. Dies kann bedeuten, dass Sie es auf einigen Seiten laden, die es nicht benötigen, aber aufgrund des Cache in modernen Browsern sollte dies kein Problem sein.
Sie können versuchen, das Objekt %code% zu verwenden, um die Kopfzeilen abzurufen, nach jQuery zu suchen und dann bei Bedarf zurückzusetzen. Die Methoden %code% und %code% sollten dir von dort helfen. Sie können das aktuelle Objekt %code% mit diesem Code abrufen:
%Vor%Sie können sich auch diese Antwort auf eine ähnliche Frage ansehen: Joomla, jQuery widersprüchliche Module
In diesem Fall entfernen Sie tatsächlich die redundanten jQuery-Lasten.
Es sei denn, Joomla bietet eine Möglichkeit, Ihnen zu sagen, welche Skripte es enthält. (Zend Framework hat eine solche Liste)
Das ist nicht möglich. PHP ist serverseitig, während Javascript (die Sprache, in der JQuery geschrieben wird) clientseitig ist. PHP-Code muss inhärent ausgeführt werden, bevor der Text, der das Javascript enthält, auch an den Benutzer gesendet und versucht wird, geladen zu werden.
Am besten ist es, jQuery nicht mehr als einmal zu verwenden. Sie können dies tun, indem Sie alle Ihre Includes durch etwas ersetzen:
%Vor%Zugegeben, das ist ein bisschen ein Hack, und es könnte einen besseren Weg geben.
EDIT: Nach ein wenig Überlegung: Dies funktioniert möglicherweise nicht einmal wegen der Asynchronität des Ladens der jQuery-Bibliothek vom Server. Es scheint, als wäre der beste Weg dies zu tun mit einem onload
Event-Handler, der an das Script-Include angehängt ist, aber das DOM unterstützt das nicht.
BEARBEITEN SIE 2: Okay, jetzt denke ich, dass Ihre beste Wette wäre, es einfach einmal in die Seite mit nur einem Skript-Tag pro Seite aufzunehmen. Sie könnten dies tun, indem Sie es zu einem globalen Header irgendeiner Art hinzufügen und dann überallhin entfernen. Dann, egal was, nicht wieder einbeziehen. Dies kann bedeuten, dass Sie es auf einigen Seiten laden, die es nicht benötigen, aber aufgrund des Cache in modernen Browsern sollte dies kein Problem sein.
Sie können versuchen, das Objekt JDocument
zu verwenden, um die Kopfzeilen abzurufen, nach jQuery zu suchen und dann bei Bedarf zurückzusetzen. Die Methoden getHeadData()
und setHeadData()
sollten dir von dort helfen. Sie können das aktuelle Objekt JDocument
mit diesem Code abrufen:
Sie können sich auch diese Antwort auf eine ähnliche Frage ansehen: Joomla, jQuery widersprüchliche Module
In diesem Fall entfernen Sie tatsächlich die redundanten jQuery-Lasten.