it-swarm-vi.com

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

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> của 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ật bộ đệm, trang web đã tải cả phiên bản được lưu trong bộ nhớ cache từ /cache và phiên bản không lưu trong 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 tài liệ rằng phương thức addScript có 'mức độ thấp' hơn so với JHtml:script phươ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: script method] ở 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:script cuối cùng gọi addScript trên 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ó được thực hiện trước không?

10
codinghands

JHtml::script Có logic bổ sung đi kè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 một 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- phương tiện truyền thông

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 George cập nhật: http://docs.j Joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page

8
Bakual

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.

4
Fedik