Saya mengembangkan modul baru-baru ini yang membutuhkan file JS dan CSS tertentu untuk disuntikkan ke dalam <head>
setiap halaman. Awalnya, saya menggunakan:
$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');
Namun, saya perhatikan bahwa ketika caching diaktifkan, situs memuat versi cached dari /cache
dan versi non-cache /modules/mod_x/js/
, yang menyebabkan kesalahan JS.
Ketika saya mengubah ini menjadi:
JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');
Script dimuat hanya sekali, dari cache, menyelesaikan kesalahan ini.
Saya membaca dalam dokumen bahwa addScript
metode ini lebih 'rendah' daripada JHtml:script
metode, tetapi lebih dari mengatakan bahwa ...
Tentu saja, Anda juga perlu kode secara manual beberapa langkah [bahwa script JHtml: lakukan untuk Anda] yang akan dilakukan secara otomatis menggunakan [JHtml: metode script] di atas [jika Anda menggunakan addScript].
... tidak ada detail lebih lanjut yang diberikan.
Jadi apa bedanya? Saya berasumsi JHtml:script
akhirnya memanggil addScript
objek dokumen di beberapa titik, tetapi apakah langkah perantara lain diambil terlebih dahulu?
sumber
Jawaban:
JHtml::script
memiliki logika tambahan yang disertakan. Lihat http://api.joomla.org/cms-3/classes/JHtml.html#method_script untuk referensi APISecara default akan mendeteksi pengaturan debug dan browser yang digunakan dan memuat skrip yang cocok. Misalnya ketika debug diaktifkan, ia akan memuat versi file yang tidak terkompresi jika ada.
Ada pengaturan opsional yang memungkinkan untuk mengganti file pada level template dan hal-hal lain.
Michael Babker menulis panduan yang baik cara menggunakan
JHtml::script()
untuk memungkinkan penggantian: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-mediaBerfungsi dalam repo untuk referensi: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659
Halaman dokumen resmi yang sekarang diperbarui oleh George: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page
sumber
dalam dua kata:
JHtml::script()
- memungkinkan Anda untuk mengganti skrip tertentu (kecuali yang sudah dilampirkan pada JDocument), tergantung dari beberapa faktor (lihat jawaban @Bakual);$doc->addScript()
- melampirkan skrip langsung ke dokumen, tanpa memeriksa penggantian;Jika Anda adalah pengembang ekstensi, maka sangat disarankan digunakan
JHtml::script()
saat Anda menambahkan skrip. Ini akan memungkinkan pengguna Anda menimpa beberapa skrip tertentu, tergantung dari apa yang mereka inginkan.Juga ada metode serupa untuk css.
sumber