Ajout d'un fichier javascript dans le pied de page et styles personnalisés

9

Pour un chargement de page rapide, je dois insérer JS à la fin de la page à partir des composants et des modules.

La façon suivante de déclarer des scripts ne fonctionne pas pour l'insérer en bas car il n'y a pas de paramètre pour le mettre en pied de page.

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

Alors, quels sont les moyens concis pour atteindre mon objectif? Si joomla ne fournit pas de telles fonctionnalités, c'est un inconvénient important pour la vitesse de chargement des pages.

Je veux également ajouter des feuilles de style personnalisées à partir d'un module afin qu'elles ne soient injectées dans la page qu'une seule fois, même si le même module l'ajoute plusieurs fois dans cette page -

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

Comment puis-je atteindre cet objectif?

dev-m
la source
1
Vous devez limiter votre question à un seul sujet. Vous avez deux questions ici.
Bakual
1
il y a une extension qui pourrait aider: extensions.joomla.org/extension/scriptsdown
noiragneau

Réponses:

6

JDocument-> addScript () a des options pour différer le chargement du script et / ou le charger asynchrone. Voir le document API: http://api.joomla.org/cms-3/classes/JDocumentHTML.html#method_addScript

Cela permettra au navigateur de charger les scripts plus tard dans le processus, ce qui aidera avec le temps de chargement de page.

Il n'y a pas d'API pour charger les scripts en bas de la page. Si vous en avez besoin, vous devez utiliser des extensions tierces ou l'ajouter directement au modèle.

Bakual
la source
Oui, j'en étais conscient, mais wordpress a ce genre de fonctionnalités concernant mes questions en cas de scripts et de CSS personnalisés.Joomla devrait donc l'ajouter.
dev-m
Il y a eu des discussions pour ajouter quelque chose comme ça. Personnellement, je ne vois pas l'avantage de l'ajouter en bas sur différer / asynchroniser.
Bakual
2

À l'heure actuelle, je pense qu'il n'y a pas d'option pour charger des scripts en bas de la page.

Pour votre deuxième question, vous pouvez utiliser une propriété booléenne statique et la définir sur true la première fois que votre CSS est rendu. Pour les instances de module suivantes, testez simplement cette propriété pour décider si vous devez ajouter votre CSS ou non.

Peut-être qu'un bon endroit pour ajouter cette propriété statique est une classe d'assistance de module.

Cordialement,

Pep Lainez
la source
2

$ document-> addScript () ajoute toujours des scripts dans la section d'en-tête avant la balise. Donc, si vous souhaitez charger un fichier de script en bas de la page, vous devrez inclure les js dans ce fichier en utilisant simplement<script src="{pathtojacvascriptfile}"></script>

J'espère que cela pourrait aider


la source
2

Il n'existe actuellement aucune méthode pour ajouter un script au pied de page. Cependant, vous pouvez créer un plugin qui obtient la sortie, recherche une balise nommée de manière appropriée, comme le pied de page et utilisez str_replace pour ajouter votre code.

Mais vous pouvez utiliser ces extensions pour y parvenir:

  1. ScriptsDown
  2. JCH Optimiser

J'ai aussi trouvé une méthode. Je préfère ne pas pirater le code principal, mais c'est le mieux que je puisse trouver pour le moment.

veuillez vérifier ce lien - les fichiers Javascript sont inclus dans le pied de page

J'espère que cela aidera les autres :)

Joomler
la source
2

Nous utilisons un module appelé "Module vierge", qui permet de mettre n'importe quel script (PHP, Java, CSS, HTML, peu importe) et de choisir où le charger (tête, corps, fin de corps, etc.).

C'est gratuit et je l'ai trouvé totalement utile: http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-modules/3668

Pour déplacer des scripts de en dessous du corps, c'est un peu plus de travail. Utilisez ceci:

Inclure dans le modèle:

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

Ajoutez une ligne "non définie" pour chaque script que vous devez supprimer de la tête. Ajoutez-le ensuite au chargement du module vierge en bas (position de débogage?). Un plus, si vous créez différents modules vierges, c'est que vous ne pouvez charger des scripts que lorsque cela est nécessaire (comme, une instance de module uniquement pour motools, le charger uniquement sur une page spécifique).

Pour les styles, vous pouvez également utiliser un module vierge.

J'espère que ça aide.

Jonathan Roza - Zott Online Ag
la source
0

Je n'ai pas encore essayé par moi-même. Vous pouvez créer un module qui n'affiche aucun HTML, imprime simplement des scripts et des styles, mais il se trouve en bas du module sur les pages où votre autre module est affiché.

Hung Tran
la source