J'ai récemment développé un module nécessitant l'injection de certains fichiers JS et CSS dans le <head>
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 en cache de /cache
et version non mise en cache de /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, pour résoudre ces erreurs.
I lu dans la documentation que la méthode addScript
était plus "de bas niveau" que la méthode JHtml:script
méthode, mais au-delà de dire ça ...
Bien sûr, vous devrez aussi coder manuellement certaines des étapes [que JHtml: script fait pour vous] qui se feraient automatiquement à l'aide de 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 JHtml:script
appelle finalement addScript
sur un objet de document à un moment donné, mais d’autres étapes intermédiaires sont-elles prises en premier?
JHtml::script
Inclut une logique supplémentaire. Voir http://api.joomla.org/cms-3/classes/JHtml.html#method_script pour la référence de l'API
Par défaut, il détecte les paramètres de débogage et le navigateur utilisés, puis charge le script correspondant. Par exemple, lorsque le débogage est activé, une version non compressée du fichier sera chargée, le cas échéant.
Il existe des paramètres facultatifs permettant de remplacer le fichier au niveau du modèle et d’autres choses.
Michael Babker a écrit un bon guide sur l'utilisation de JHtml::script()
pour autoriser les substitutions: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable- médias
Fonction 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
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()
- attache un script directement au document, sans vérification des remplacements;Si vous êtes le développeur de l'extension, il est vivement recommandé d'utiliser 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 les CSS.