J'ai récemment développé un module qui exigeait que certains fichiers JS et CSS soient injectés dans la <head>
page de chaque page. Au départ, j'ai utilisé:
$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');
Cependant, j'ai remarqué que lorsque la mise en cache était activée, le site chargeait à la fois une version mise en cache et une version /cache
non mise en cache /modules/mod_x/js/
, provoquant des erreurs JS.
Quand j'ai changé cela en:
JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');
Le script n'a été chargé qu'une seule fois, à partir du cache, résolvant ces erreurs.
J'ai lu dans la documentation que la addScript
méthode était plus «bas niveau» que la JHtml:script
méthode, mais au-delà de dire que ...
Bien sûr, vous devrez également coder manuellement certaines des étapes [que JHtml: script fait pour vous] qui seraient effectuées automatiquement en utilisant la [méthode JHtml: script] ci-dessus [si vous utilisez addScript].
... aucun autre détail n'est donné.
Alors quelle est la différence? Je suppose que JHtml:script
finalement, addScript
à un moment donné, un objet document est appelé , mais d'autres étapes intermédiaires sont-elles prises en premier?
la source
Réponses:
JHtml::script
comprend une logique supplémentaire. Voir http://api.joomla.org/cms-3/classes/JHtml.html#method_script pour la référence APIPar défaut, il détectera le paramètre de débogage et le navigateur utilisé et chargera le script correspondant. Par exemple, lorsque le débogage est activé, il chargera une version non compressée du fichier s'il est présent.
Il existe des paramètres facultatifs qui permettent de remplacer le fichier au niveau du modèle et d'autres choses.
Michael Babker a écrit un bon guide sur la façon d'utiliser
JHtml::script()
pour autoriser les remplacements: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-mediaFonction dans le référentiel pour référence: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659
Page de documentation officielle qui est maintenant mise à jour par George: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page
la source
en deux mots:
JHtml::script()
- vous permet de remplacer le script spécifique (sauf celui déjà attaché à JDocument), dépend de certains facteurs (voir la réponse @Bakual);$doc->addScript()
- attachez le script directement au document, sans vérifier les remplacements;Si vous êtes le développeur de l'extension, alors une utilisation fortement recommandée
JHtml::script()
lorsque vous ajoutez le script. Cela permettra à vos utilisateurs de remplacer certains scripts spécifiques, en fonction de ce qu'ils veulent.Il existe également une méthode similaire pour CSS.
la source