Prüfe, ob jQuery im Header (Joomla) enthalten ist

7

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.

    
privateace 26.08.2009, 01:56
quelle

6 Antworten

14

Besser noch, Sie können es mit JavaScript verifizieren und es dann zum Kopf hinzufügen, wenn es fehlt.

%Vor%     
Renfro 27.11.2009, 16:48
quelle
3

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 ();

abrufen

Sie 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%     
bucabay 26.08.2009 08:06
quelle
1
___ answer1809729 ___

Besser noch, Sie können es mit JavaScript verifizieren und es dann zum Kopf hinzufügen, wenn es fehlt.

%Vor%     
___ qstnhdr ___ Prüfe, ob jQuery im Header (Joomla) enthalten ist ___ answer1333085 ___

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 ();

abrufen

Sie 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%     
___ antwort1332003 ___

Sollte zuerst die Überprüfung in Javascript durchführen. zum Beispiel:

%Vor%

Dann könnten Sie eine Nachricht von ajax an den Server senden.

    
___ qstntxt ___

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.

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ tag123jquery ___ jQuery ist eine beliebte Cross-Browser-JavaScript-Bibliothek, die das DOM-Traversal (Document Object Model), die Ereignisbehandlung, Animationen und AJAX-Interaktionen erleichtert, indem die Diskrepanzen zwischen Browsern minimiert werden. Eine mit jQuery gekennzeichnete Frage sollte mit jquery in Zusammenhang stehen, daher sollte jquery von dem fraglichen Code verwendet werden, und mindestens eine jquery-nutzungsbezogene Elemente müssen in der Frage enthalten sein. ___ answer1332008 ___

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.

    
___ answer1336084 ___

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.

    
___ answer1332004 ___

Es sei denn, Joomla bietet eine Möglichkeit, Ihnen zu sagen, welche Skripte es enthält. (Zend Framework hat eine solche Liste)

    
___ tag123html ___ HTML (Hyper Text Markup Language) ist die Standard-Auszeichnungssprache, die zum Strukturieren von Webseiten und zum Formatieren von Inhalt verwendet wird. HTML beschreibt die Struktur einer Website semantisch zusammen mit Hinweisen für die Präsentation, wodurch sie eine Markup-Sprache statt einer Programmiersprache wird. Die neueste Revision der HTML-Spezifikation ist HTML5.2. ___ tag123plugins ___ Ein Plug-in (oder Plug-in) ist ein Satz von Softwarekomponenten, der einer größeren Softwareanwendung bestimmte Fähigkeiten hinzufügt. Falls unterstützt, ermöglichen Plug-Ins die Anpassung der Funktionalität einer Anwendung. ___ tag123joomla ___ Joomla! ist ein kostenloses und Open-Source-Content-Management-System (CMS) zum Veröffentlichen von Inhalten im World Wide Web und in Intranets sowie ein MVC-Webanwendungsframework (Model-View-Controller), das auch unabhängig verwendet werden kann. Joomla-Fragen können auch auf https://joomla.stackexchange.com/ gestellt werden. ___
andres descalzo 26.08.2009 02:00
quelle
1

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.

    
Imagist 26.08.2009 02:03
quelle
1

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:

%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.

    
jlleblanc 26.08.2009 16:46
quelle
0

Es sei denn, Joomla bietet eine Möglichkeit, Ihnen zu sagen, welche Skripte es enthält. (Zend Framework hat eine solche Liste)

    
jeef3 26.08.2009 02:00
quelle

Tags und Links