Hinzufügen einer Javascript-Datei in der Fußzeile und in benutzerdefinierten Stilen


9

Für ein schnelles Laden der Seite muss ich JS am Ende der Seite aus Komponenten und Modulen einfügen.

Die folgende Art, Skripte zu deklarieren, funktioniert nicht, um sie unten einzufügen, da es keinen Parameter gibt, um sie in die Fußzeile zu setzen.

$rsws_document  = JFactory::getDocument(); 
$rsws_document->addScript();

Was sind die prägnanten Wege, um meinen Zweck zu erfüllen? Wenn joomla keine solche Funktionalität bietet, ist dies ein erheblicher Nachteil für die Seitenladegeschwindigkeit.

Ich möchte auch benutzerdefinierte Stylesheets aus einem Modul hinzufügen, damit sie nur einmal in die Seite eingefügt werden, selbst wenn dasselbe Modul sie mehrmals auf dieser Seite hinzufügt.

<style type="text/css"> .classname { color:red; }.....</style>

Wie kann ich das erreichen?


1
Sie sollten Ihre Frage auf ein Thema beschränken. Sie haben hier zwei Fragen.
Bakual

1
Es gibt eine Erweiterung, die helfen könnte: extensions.joomla.org/extension/scriptsdown
noiragneau

Antworten:


6

JDocument-> addScript () bietet Optionen, um das Laden des Skripts zu verschieben und / oder es asynchron zu laden. Siehe das API-Dokument: http://api.joomla.org/cms-3/classes/JDocumentHTML.html#method_addScript

Auf diese Weise kann der Browser die Skripte später im Prozess laden, was die Ladezeit der Seiten erleichtert.

Es gibt keine API zum Laden der Skripte am Ende der Seite. Wenn Sie dies benötigen, müssen Sie Erweiterungen von Drittanbietern verwenden oder diese direkt zur Vorlage hinzufügen.


Ja, das war mir bewusst. Aber WordPress hat diese Art von Funktionen in Bezug auf meine Fragen sowohl für Skripte als auch für benutzerdefinierte CSS. Also sollte Joomla sie hinzufügen.
Dev-M

Es gab Diskussionen, um so etwas hinzuzufügen. Persönlich sehe ich nicht den Vorteil, es unten gegenüber defer / async hinzuzufügen.
Bakual

2

Inzwischen gibt es meines Erachtens keine Möglichkeit, Skripte am Ende der Seite zu laden.

Für Ihre zweite Frage können Sie eine statische boolesche Eigenschaft verwenden und diese beim ersten Rendern Ihres CSS auf true setzen. Testen Sie für folgende Modulinstanzen einfach diese Eigenschaft, um zu entscheiden, ob Sie Ihre CSS hinzufügen müssen oder nicht.

Möglicherweise ist eine Modul-Hilfsklasse ein guter Ort, um diese statische Eigenschaft hinzuzufügen.

Grüße,


2

$ document-> addScript () fügt immer Skripte im Header-Bereich vor dem Tag hinzu. Wenn Sie also eine Skriptdatei am Ende der Seite laden möchten, müssen Sie die js einfach mit in diese Datei aufnehmen<script src="{pathtojacvascriptfile}"></script>

Ich hoffe das könnte helfen


2

Derzeit gibt es keine Methode, um der Fußzeile ein Skript hinzuzufügen. Sie können jedoch ein Plugin erstellen, das die Ausgabe erhält, nach einem entsprechend benannten Tag wie der Fußzeile sucht und mit str_replace Ihren Code hinzufügt.

Mit diesen Erweiterungen können Sie jedoch Folgendes erreichen:

  1. ScriptsDown
  2. JCH Optimieren

Auch ich habe eine Methode gefunden. Ich ziehe es vor, den Kerncode nicht zu hacken, aber das ist das Beste, was ich mir im Moment einfallen lassen kann.

Bitte überprüfen Sie diesen Link - Javascript-Dateien enthalten in der Fußzeile

Ich hoffe es wird anderen helfen :)


2

Wir verwenden ein Modul namens "Blank Module", mit dem Sie jedes Skript (PHP, Java, CSS, HTML usw.) einfügen und auswählen können, wo es geladen werden soll (Kopf, Körper, Ende des Körpers usw.).

Es ist kostenlos und ich fand es absolut nützlich: http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-modules/3668

Das Verschieben von Skripten von unten nach unten ist etwas mehr Arbeit. Benutze das:

In die Vorlage aufnehmen:

<? php
$ head = $ doc-> getHeadData ();
// Skripte entfernen
unset ($ doc -> _ scripts [JURI :: root (true). '/media/system/js/mootools-more.js']);
?>

Fügen Sie für jedes Skript, das Sie aus head entfernen möchten, eine "nicht gesetzte" Zeile hinzu. Fügen Sie es dann dem leeren Modul hinzu, das unten geladen wird (Debug-Position?). Ein Plus, wenn Sie verschiedene leere Module erstellen, ist, dass Sie Skripte nur bei Bedarf laden können (z. B. eine Modulinstanz nur für Motools, die nur auf einer bestimmten Seite geladen wird).

Für Stile können Sie auch das leere Modul verwenden.

Ich hoffe das hilft.


0

Ich habe es noch nicht alleine versucht. Sie können ein Modul erstellen, das kein HTML anzeigt, sondern nur Skripte und Stile druckt, aber es befindet sich an der unteren Modulposition auf den Seiten, auf denen Ihr anderes Modul angezeigt wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.