web-dev-qa-db-fra.com

Quelle est la différence entre JHtml: script () et $ doc-> addScript?

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?

10
codinghands

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

8
Bakual

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.

4
Fedik