it-swarm-id.com

Apa perbedaan antara JHtml: script () dan $ doc-> addScript?

Saya mengembangkan modul baru-baru ini yang mengharuskan 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 kedua versi cache dari /cache dan versi yang tidak di-cache dari /modules/mod_x/js/, 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 baca di dokumen bahwa metode addScript lebih 'rendah' ​​daripada JHtml:script metode, tetapi melampaui 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 pada objek dokumen di beberapa titik, tetapi apakah langkah perantara lain dilakukan terlebih dahulu?

10
codinghands

JHtml::script Menyertakan logika tambahan. Lihat http://api.joomla.org/cms-3/classes/JHtml.html#method_script untuk referensi API

Secara 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 bagaimana menggunakan JHtml::script() untuk memungkinkan penggantian: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable- media

Berfungsi 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

8
Bakual

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() - lampirkan skrip langsung ke dokumen, tanpa memeriksa penggantian;

Jika Anda adalah pengembang ekstensi, maka sangat disarankan gunakan 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.

4
Fedik