Недавно я разработал модуль, который требовал внедрения определенных файлов JS и CSS в <head>
каждую страницу. Изначально я использовал:
$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');
Однако я заметил, что при включенном кэшировании сайт загружал как кешированную версию, так /cache
и не кешированную версию /modules/mod_x/js/
, вызывая ошибки JS.
Когда я изменил это на:
JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');
Скрипт загружался только один раз, из кеша, исправляя эти ошибки.
Я прочитал в документах, что addScript
метод был более «низкоуровневым», чем JHtml:script
метод, но не говоря о том, что ...
Конечно, вам также нужно будет вручную написать некоторые шаги [которые JHtml: script выполняет для вас], которые будут выполнены автоматически с использованием [JHtml: script method] выше [если вы используете addScript].
... дальнейших подробностей не приводится.
Так в чем же разница? Я предполагаю , что в JHtml:script
конечном итоге вызывает addScript
на объект документа , в какой - то момент, но и другие промежуточные шаги в первую очередь?
источник
Ответы:
JHtml::script
имеет дополнительную логику в комплекте. См. Http://api.joomla.org/cms-3/classes/JHtml.html#method_script для справки по API.По умолчанию он определяет параметры отладки и используемый браузер и загружает соответствующий скрипт. Например, если включена отладка, будет загружена несжатая версия файла, если она есть.
Есть дополнительные настройки, которые позволяют переопределить файл на уровне шаблона и другие вещи.
Майкл Бабкер написал хорошее руководство по использованию
JHtml::script()
переопределений: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-mediaФункция в репо для справки: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659
Официальная страница документа, которая теперь обновляется Джорджем: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page
источник
в двух словах:
JHtml::script()
- позволяют переопределить конкретный скрипт (кроме того, который уже присоединен к JDocument), зависит от некоторых факторов (см. ответ @Bakual);$doc->addScript()
- прикрепить скрипт непосредственно к документу, не проверяя переопределения;Если вы разработчик расширения, то настоятельно рекомендуем использовать его
JHtml::script()
при добавлении скрипта. Это позволит вашим пользователям переопределить некоторые конкретные сценарии, в зависимости от того, что они хотят.Также существует аналогичный метод для CSS.
источник