Ich habe kürzlich ein Modul entwickelt, bei dem bestimmte JS- und CSS-Dateien in <head>
jede Seite eingefügt werden müssen. Anfangs habe ich verwendet:
$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');
Ich habe jedoch festgestellt, dass die Site beim Aktivieren des Caching sowohl eine zwischengespeicherte /cache
als auch eine nicht zwischengespeicherte Version von geladen hat /modules/mod_x/js/
, was zu JS-Fehlern führte.
Als ich das geändert habe in:
JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');
Das Skript wurde nur einmal aus dem Cache geladen, um diese Fehler zu beheben.
Ich habe in den Dokumenten gelesen, dass die addScript
Methode "niedriger" als die JHtml:script
Methode war, aber darüber hinaus ...
Natürlich müssen Sie auch einige der Schritte [die JHtml: script für Sie ausführt] manuell codieren, die automatisch mit der obigen [JHtml: script-Methode] ausgeführt werden [wenn Sie addScript verwenden].
... es werden keine weiteren Details angegeben.
Was ist der Unterschied? Ich gehe davon aus, dass JHtml:script
irgendwann addScript
ein Dokumentobjekt aufgerufen wird, aber werden zuerst andere Zwischenschritte unternommen?
quelle
Antworten:
JHtml::script
hat zusätzliche Logik enthalten. Die API-Referenz finden Sie unter http://api.joomla.org/cms-3/classes/JHtml.html#method_scriptStandardmäßig erkennt es die Debug-Einstellung und den verwendeten Browser und lädt das passende Skript. Wenn beispielsweise das Debuggen aktiviert ist, wird eine nicht komprimierte Version der Datei geladen, falls vorhanden.
Es gibt optionale Einstellungen, mit denen die Datei auf Vorlagenebene überschrieben werden kann.
Michael Babker hat eine gute Anleitung
JHtml::script()
zum Zulassen von Überschreibungen geschrieben: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-mediaFunktion im Repo als Referenz: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659
Offizielle Dokumentseite, die jetzt von George aktualisiert wird: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page
quelle
in zwei Worten:
JHtml::script()
- Sie können das spezifische Skript überschreiben (mit Ausnahme des bereits an JDocument angehängten Skripts), das von einigen Faktoren abhängt (siehe @ Bakual-Antwort).$doc->addScript()
- Skript direkt an das Dokument anhängen, ohne eine Überschreibung zu überprüfen;Wenn Sie der Erweiterungsentwickler sind, wird die Verwendung
JHtml::script()
beim Hinzufügen des Skripts dringend empfohlen . Auf diese Weise können Ihre Benutzer einige bestimmte Skripts überschreiben, je nachdem, was sie möchten.Auch gibt es ähnliche Methode für CSS.
quelle