Pour un chargement de page rapide, je dois insérer JS à la fin de la page à partir de composants et de modules.
La manière 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 but? Si joomla ne fournit pas une telle fonctionnalité, la vitesse de chargement des pages est un inconvénient majeur.
Je souhaite é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?
JDocument-> addScript () a des options pour différer le chargement du script et/ou le charger de manière asynchrone. Voir la documentation de l'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 facilitera le temps de chargement.
Il n'y a pas d'API pour charger les scripts au bas de la page. Si vous en avez besoin, vous devez utiliser des extensions tierces ou les ajouter directement au modèle.
Il n'y a pas de méthode pour ajouter un script au pied de page pour le moment. Cependant, vous pouvez créer un plug-in qui récupère la sortie, recherche une balise nommée de manière appropriée, telle que footer, et utilisez str_replace pour ajouter votre code.
Mais vous pouvez utiliser ces extensions pour atteindre cet objectif:
Aussi j'ai 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 - fichiers Javascript inclus dans le pied de page
J'espère que ça va aider les autres :)
A présent, je pense qu'il n'y a pas d'option pour charger des scripts au bas de la page.
Pour votre deuxième question, vous pouvez utiliser une propriété booléenne statique et lui attribuer la valeur true lors du premier rendu de votre css. 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,
Nous utilisons un module appelé "Blank Module", 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
Déplacer des scripts de bas en haut du corps est un peu plus de travail. Utilisez ceci:
Inclure dans le modèle:
<? php $ head = $ doc-> getHeadData (); // Supprimer les scripts unset ($ doc -> _ scripts [JURI :: root (true). '/media/system/js/mootools-more.js']); ?>
Ajoutez une ligne "non définie" pour chaque script à supprimer de la tête. Ajoutez-le ensuite au chargement du module vide en bas (position de débogage?). Un avantage supplémentaire, si vous créez différents modules vides, est que vous ne pouvez charger des scripts que si cela est nécessaire (par exemple, une instance de module uniquement pour motools, en la chargeant uniquement sur une page spécifique).
Pour les styles, vous pouvez également utiliser un module vide.
J'espère que ça aide.
$ document-> addScript () ajoute toujours des scripts dans la section d'en-tête avant la balise. Donc, si vous voulez charger un fichier de script au bas de la page, vous devez inclure le js dans ce fichier en utilisant simplement <script src="{pathtojacvascriptfile}"></script>
J'espère que cela pourrait aider
Je n'ai pas encore essayé par moi-même. Vous pouvez créer un module qui n’affiche pas de code HTML, n’imprime que les scripts et les styles, mais qui se trouve en bas du module sur les pages où votre autre module est affiché.