Desarrollé un módulo recientemente que requería que se inyectaran ciertos archivos JS y CSS en <head>
cada página. Inicialmente, usé:
$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');
Sin embargo, noté que cuando se habilitaba el almacenamiento en caché, el sitio cargaba tanto una versión en caché como una versión /cache
sin caché /modules/mod_x/js/
, lo que causaba errores de JS.
Cuando cambié esto a:
JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');
El script se cargó solo una vez, desde la memoria caché, resolviendo estos errores.
Yo leo en los documentos que el addScript
método era más 'bajo nivel' que el JHtml:script
método, pero más allá de decir que ...
Por supuesto, también necesitará codificar manualmente algunos de los pasos [que JHtml: script hace por usted] que se realizarían automáticamente usando el [JHtml: método de script] anterior [si usa addScript].
... no se dan más detalles.
Entonces, ¿cuál es la diferencia? Supongo que JHtml:script
finalmente llama addScript
a un objeto de documento en algún momento, pero ¿se toman primero otros pasos intermedios?
fuente
Respuestas:
JHtml::script
tiene lógica adicional incluida. Ver http://api.joomla.org/cms-3/classes/JHtml.html#method_script para la referencia de la APIDe forma predeterminada, detectará la configuración de depuración y el navegador utilizado y cargará el script correspondiente. Por ejemplo, cuando la depuración está habilitada, cargará una versión sin comprimir del archivo si está presente.
Hay configuraciones opcionales que permiten anular el archivo a nivel de plantilla y otras cosas.
Michael Babker escribió una buena guía sobre cómo usar
JHtml::script()
para permitir anulaciones: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-mediaFunción en el repositorio para referencia: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659
Página oficial del documento que ahora George actualiza: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page
fuente
en dos palabras:
JHtml::script()
- le permite anular el script específico (excepto el que ya está adjunto a JDocument), depende de algunos factores (consulte la respuesta @Bakual);$doc->addScript()
- adjuntar script directamente al documento, sin marcar una anulación;Si usted es el desarrollador de la extensión, se recomienda su uso
JHtml::script()
cuando agregue el script. Esto permitirá que sus usuarios anulen algunos scripts específicos, dependiendo de lo que quieran.También hay un método similar para css.
fuente