it-swarm.dev

Qual è la differenza tra JHtml: script () e $ doc-> addScript?

Di recente ho sviluppato un modulo che richiedeva l'iniezione di alcuni file JS e CSS nel <head> di ogni pagina. Inizialmente, ho usato:

$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');

Tuttavia, ho notato che quando è stata abilitata la memorizzazione nella cache, il sito ha caricato sia una versione cache da /cache e versione non memorizzata nella cache da /modules/mod_x/js/, causando errori JS.

Quando l'ho cambiato in:

JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');

Lo script è stato caricato una sola volta, dalla cache, risolvendo questi errori.

I leggi nei documenti che il metodo addScript era più "basso livello" rispetto al JHtml:script metodo, ma oltre a dire che ...

Ovviamente, dovrai anche codificare manualmente alcuni dei passaggi [che JHtml: script fa per te] che verrebbero eseguiti automaticamente usando il [JHtml: metodo script] sopra [se usi addScript].

... non vengono forniti ulteriori dettagli.

Quindi qual è la differenza? Presumo JHtml:script alla fine chiama addScript su un oggetto documento ad un certo punto, ma vengono prima intrapresi altri passaggi intermedi?

10
codinghands

JHtml::script Ha una logica aggiuntiva inclusa. Vedi http://api.joomla.org/cms-3/classes/JHtml.html#method_script per il riferimento API

Per impostazione predefinita, rileverà le impostazioni di debug e il browser utilizzato e caricherà lo script corrispondente. Ad esempio, quando il debug è abilitato, caricherà una versione non compressa del file, se presente.

Ci sono impostazioni opzionali che consentono di sovrascrivere il file a livello di modello e altre cose.

Michael Babker ha scritto una buona guida su come usare JHtml::script() per consentire le sostituzioni: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable- media

Funzione in repository per riferimento: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659

Pagina di documento ufficiale che è ora aggiornata da George: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page

8
Bakual

in due parole:

  • JHtml::script() - ti permette di sovrascrivere lo script specifico (tranne quello già collegato a JDocument), dipende da alcuni fattori (vedi risposta @Bakual);
  • $doc->addScript() - collega lo script direttamente al documento, senza controllare una sostituzione;

Se sei lo sviluppatore di estensioni, ti consigliamo vivamente di utilizzare JHtml::script() quando aggiungi lo script. Ciò consentirà ai tuoi utenti di sovrascrivere alcuni script specifici, a seconda di ciò che desiderano.
Inoltre esiste un metodo simile per css.

4
Fedik