Sự khác biệt giữa JHtml: script () và $ doc-> addScript là gì?


10

Gần đây tôi đã phát triển một mô-đun yêu cầu một số tệp JS và CSS nhất định được chèn vào <head>mỗi trang. Ban đầu, tôi đã sử dụng:

$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');

Tuy nhiên, tôi nhận thấy rằng khi bộ đệm được kích hoạt, trang web đã tải cả phiên bản được lưu trong bộ nhớ cache từ /cachevà phiên bản không được lưu vào bộ nhớ cache từ đó /modules/mod_x/js/, gây ra lỗi JS.

Khi tôi đổi nó thành:

JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');

Tập lệnh chỉ được tải một lần, từ bộ đệm, giải quyết các lỗi này.

Tôi đã đọc trong các tài liệu rằng addScriptphương pháp này 'mức độ thấp' hơn JHtml:scriptphương thức, nhưng ngoài việc nói rằng ...

Tất nhiên, bạn cũng sẽ cần mã thủ công một số bước [mà JHtml: script thực hiện cho bạn] sẽ được thực hiện tự động bằng cách sử dụng [JHtml: phương thức script] ở trên [nếu bạn sử dụng addScript].

... không có thêm chi tiết nào được đưa ra.

Vậy sự khác biệt là gì? Tôi giả sử JHtml:scriptcuối cùng gọi addScriptvào một đối tượng tài liệu tại một số điểm, nhưng các bước trung gian khác được thực hiện trước?


4
Tôi đã viết lại các tài liệu Joomla một chút để thử và cập nhật nó - xem bây giờ nó có ý nghĩa hơn không?
George Wilson

1
@GeorgeWilson Các tài liệu Joomla đã thực sự được cải thiện gần đây. Cảm ơn :)
TryHarder 04/07 '

Câu hỏi liên quan về bảng định kiểu: j Joomla.stackexchange.com/q/10062/5239
Flimm

Câu trả lời:


8

JHtml::scriptcó logic bổ sung bao gồm. Xem http://api.j Joomla.org/cms-3/groupes/JHtml.html#method_script để tham khảo API

Theo mặc định, nó sẽ phát hiện cài đặt gỡ lỗi và trình duyệt được sử dụng và tải tập lệnh phù hợp. Ví dụ: khi gỡ lỗi được bật, nó sẽ tải phiên bản không nén của tệp nếu có.

Có các cài đặt tùy chọn cho phép ghi đè tệp ở cấp độ mẫu và những thứ khác.

Michael Babker đã viết một hướng dẫn tốt về cách sử dụng JHtml::script()để cho phép ghi đè: http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-media

Chức năng trong repo để tham khảo: https://github.com/j Joomla / j Joomla-cms/blob/staging/lologists/cms/html/html.php#L659

Trang tài liệu chính thức hiện được cập nhật bởi George: http : //docs.j Joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page


2
cảm ơn câu trả lời Tham chiếu API khá ngắn gọn - có giải thích toàn diện hơn về tác động của Det_browser và Det_debug không, và khi bạn nói 'cài đặt tùy chọn' và 'những thứ khác' có được ghi lại ở bất cứ đâu không?
mã hóa

Tôi đã thêm một liên kết đến một bài viết của Michael để giải thích phần ghi đè. Về phần gỡ lỗi và phần trình duyệt, tôi không nghĩ có tài liệu. Bạn sẽ phải đọc mã cho điều đó.
Bakual

1
Vì vậy, nếu có một tệp js không nén và nén chẳng hạn và gỡ lỗi thì nó sẽ tải tên tệp-unsompression.js và chỉ filename.js khi gỡ lỗi. Đối với trình duyệt khi gỡ lỗi, nó tìm tên tệp-browser.js sau đó tên tệp-browser-browserversion.js, v.v.
George Wilson

2
Đây là một câu trả lời bẻ khóa - cảm ơn @Bakual và @GeorgeWilson!
mã hóa

1
Đừng quên rằng JHtml cũng có thể nối MD5sum của tập lệnh hoặc biểu định kiểu vào cache-bust.
Flimm

4

trong hai từ:

  • JHtml::script() - cho phép bạn ghi đè tập lệnh cụ thể (ngoại trừ tập lệnh đã được đính kèm vào JDocument), phụ thuộc vào một số yếu tố (xem câu trả lời @Bakual);
  • $doc->addScript() - đính kèm tập lệnh trực tiếp vào tài liệu mà không cần kiểm tra ghi đè;

Nếu bạn là nhà phát triển tiện ích mở rộng, thì rất nên sử dụng JHtml::script()khi bạn thêm tập lệnh. Điều này sẽ cho phép người dùng của bạn ghi đè một số tập lệnh cụ thể, tùy thuộc vào những gì họ muốn.
Cũng có phương pháp tương tự cho css.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.