Niedawno opracowałem moduł, który wymagał wstrzykiwania niektórych plików JS i CSS do <head>każdej strony. Początkowo użyłem:
$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');
Zauważyłem jednak, że po włączeniu buforowania witryna załadowała zarówno wersję buforowaną, jak /cachei wersję niebuforowaną /modules/mod_x/js/, powodując błędy JS.
Kiedy zmieniłem to na:
JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');
Skrypt został załadowany tylko raz, z pamięci podręcznej, usuwając te błędy.
I czytać w docs że addScriptmetoda była bardziej „niski poziom” niż JHtml:scriptmetoda, ale poza mówiąc, że ...
Oczywiście będziesz musiał ręcznie zakodować niektóre kroki [które robi dla ciebie skrypt JHtml:], które zostałyby wykonane automatycznie przy użyciu powyższej [JHtml: metoda skryptowa] [jeśli używasz addScript].
... nie podano dalszych szczegółów.
Jaka jest różnica? Zakładam, że JHtml:scriptostatecznie wywołuje addScriptobiekt dokumentu w pewnym momencie, ale czy najpierw są podejmowane inne kroki pośrednie?