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 /cache
i 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 addScript
metoda była bardziej „niski poziom” niż JHtml:script
metoda, 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:script
ostatecznie wywołuje addScript
obiekt dokumentu w pewnym momencie, ale czy najpierw są podejmowane inne kroki pośrednie?