Яка різниця між JHtml: script () та $ doc-> addScript?


10

Нещодавно я розробив модуль, який вимагав введення певних файлів 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: скрипт робить для вас], які будуть виконані автоматично за допомогою методу [JHtml: script] вище [якщо ви використовуєте addScript].

... більше деталей не наводиться.

То яка різниця? Я припускаю, що JHtml:scriptврешті-решт викликає addScriptоб’єкт документа в якийсь момент, але чи інші кроки-посередники зроблені першими?


4
Я трохи переписав документи Joomla, щоб спробувати оновити її - подивіться, чи має тепер це більше сенсу?
Джордж Вілсон

1
@GeorgeWilson Документи Joomla справді покращилися останнім часом. Дякую :)
TryHarder

Питання щодо пов'язаних таблиць стилів: joomla.stackexchange.com/q/10062/5239
Flimm

Відповіді:


8

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

Офіційна сторінка doc, яка тепер оновлюється Джорджем: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page


2
дякую за відповідь. Посилання на API досить коротке - чи є більш всебічне пояснення ефектів detect_browser та detect_debug, і коли ви говорите "необов’язкові настройки" та "інші речі", це документується де-небудь?
кодування руками

Я додав посилання на статтю Майкла, яка пояснює переважну частину. Що стосується налагодження та частини браузера, я не думаю, що існує документація. Вам доведеться прочитати код для цього.
Бакуаль

1
Отже, якщо є, наприклад, нестиснений та стиснутий js-файл, і налагоджена програма, він завантажить ім'я файлу-непіддане.js та просто filename.js, коли налагодження вимкнено. Для браузера при відладці він шукає filename-browser.js, а потім filename-browser-browserversion.js тощо
Джордж Вілсон,

2
Це надзвичайна відповідь - дякую @Bakual та @GeorgeWilson!
кодування руками

1
Не забувайте, що цей JHtml також може додати MD5сум сценарію або таблиці стилів до кеш-бюсту.
Флейм

4

двома словами:

  • JHtml::script() - дозволяють переосмислити конкретний сценарій (за винятком того, що вже додається до JDocument), залежать від деяких факторів (див. відповідь @Bakual);
  • $doc->addScript() - прикріплювати скрипт безпосередньо до документа, не перевіряючи переопределення;

Якщо ви розробник розширення, настійно рекомендуємо використовувати його, JHtml::script()коли ви додаєте сценарій. Це дозволить вашим користувачам змінювати певні сценарії, залежно від того, чого вони хочуть.
Також існує аналогічний метод для css.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.