it-swarm-es.tech

¿Cuál es la diferencia entre JHtml: script () y $ doc-> addScript?

Recientemente desarrollé un módulo que requería que ciertos archivos JS y CSS se inyectaran en el <head> de 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 habilitó el almacenamiento en caché, el sitio cargó tanto una versión en caché de /cache y versión no almacenada en caché de /modules/mod_x/js/, causando errores 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 caché, resolviendo estos errores.

I lea en los documentos que el método addScript era más 'de 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? Asumo JHtml:script eventualmente llama a addScript en un objeto de documento en algún momento, pero ¿se toman primero otros pasos intermedios?

10
codinghands

JHtml::script Tiene lógica adicional incluida. Ver http://api.joomla.org/cms-3/classes/JHtml.html#method_script para la referencia de la API

De 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- medios

Funció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

8
Bakual

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() - adjunta el script directamente al documento, sin marcar una anulación;

Si usted es el desarrollador de la extensión, entonces le recomendamos usar 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.

4
Fedik