Cách tốt nhất để bao gồm các tệp CSS / JS trong tiện ích mở rộng tùy chỉnh của tôi


8

Nếu tôi cần bao gồm các tệp CSS hoặc JS trong các tiện ích mở rộng tùy chỉnh của mình, cách tốt nhất và an toàn nhất để đạt được điều này là gì:

  1. Tôi có nên đặt thư mục ia cụ thể trong tệp zip mở rộng của mình không?
  2. Tôi nên khai báo các tệp trong tệp kê khai XML của mình như thế nào?
  3. Làm cách nào để bao gồm các tệp trong tiêu đề Joomla (chỉ khi cần)?

Câu trả lời:


7

Cách tốt nhất là sử dụng thư mục media. Vì vậy, trước tiên bạn sẽ cần tạo một thư mục được gọi mediatrong thư mục mô-đun của bạn.

Lưu ý: Thư mục này nên được tạo trước khi cài đặt, không phải sau.

Bên trong thư mục phương tiện, tạo 2 thư mục con cssjs. Điều này không bắt buộc nhưng nó chỉ đẹp hơn để giữ mọi thứ riêng biệt.

Sau đó thêm phần sau vào tệp XML của bạn:

<media folder="media" destination="mod_EXAMPLE">
    <folder>css</folder>
    <folder>js</folder>
</media>

Thay đổi mod_EXAMPLEbất kể mô-đun của bạn là gì.

Sau khi cài đặt, thư mục phương tiện sẽ tự động được di chuyển và bạn sẽ kết thúc với các mục sau:

JOOMLA_ROOT/media/mod_EXAMPLE/js

JOOMLA_ROOT/media/mod_EXAMPLE/css

Tôi biết cho đến nay tôi đã đề cập đến một mô-đun nhưng áp dụng tương tự cho các thành phần quá.

Để gọi tệp, bạn có thể thêm mã sau vào tệp default.php cho tiện ích mở rộng của mình:

JHtml::_('stylesheet', JUri::root() . 'media/mod_EXAMPLE/css/style.css');  // For CSS files
JHtml::_('script', JUri::root() . 'media/mod_EXAMPLE/js/script.js');       // For JS files

Hi vọng điêu nay co ich


2
Bạn cũng có thể làm JHtml::stylesheet("mod_EXAMPLE/style.css", array(), true)để tải media/mod_EXAMPLE/css/style.css(lưu ý phần bổ sung css/) và JHtml::script("mod_EXAMPLE/script.js", false, true)tải media/mod_EXAMPLE/js/script.js(lưu ý phần bổ sung js/).
Flimm

2
  1. Tôi giả sử rằng phần mở rộng của bạn là một thành phần. Cách tốt nhất là tạo một mediathư mục bên cạnh adminsitethư mục. Sau đó, đặt js, cssimgtập tin bên trong thư mục riêng biệt như thế này:

    index.html
    YOUR_COMPONENT_NAME.xml
    [+] admin
    [+] site
    [-] media
       [-] js
          main.js
          index.html
       [+] css
       [+] img
    

    Lưu ý rằng bất kỳ thư mục nên có một index.htmltập tin trống .

  2. Trong bảng kê khai XML của bạn (YOU_COMPONENT_NAME.xml), bạn có thể khai báo mediatệp như thế này:

    <media destination="com_YOUR_COMPONENT_NAME" folder="media">
        <filename>index.html</filename>
        <folder>css</folder>
        <folder>js</folder>
        <folder>img</folder>
    </media>
    
  3. Chỉnh sửa chế độ xem mặc định (default.php) và thêm các dòng này để đưa các tệp vào Joomla! cái đầu:

    $document = JFactory::getDocument();
    $document->addStyleSheet(JUri::base() . 'media/com_YOUR_COMPONENT_NAME/css/main.css');
    $document->addScript(JUri::base() . 'media/com_YOUR_COMPONENT_NAME/js/main.js');
    $test_image_url = JUri::base() . 'media/com_YOUR_COMPONENT_NAME/img/test.jpg';
    

JHtmlnên được sử dụng để nhập khẩu CSS và các file JS hơn addStyleSheetaddScript: docs.joomla.org/J3.x:Adding_JavaScript_and_CSS_to_the_page
Lodder

@Lodder Không, không nên. Vấn đề là các tham số của JHtml::script()JHtml::stylesheet()được thay đổi: docs.j Joomla.org/Potential_backward_compabilities_issues_in_J Joomla_3_and_J Joomla_Pl platform_12.2
Farahmand

@Lodder Về tài liệu tham khảo của bạn :JHtml offers much more flexibility than JDocument, whilst using the same base functionality - indeed at the end of the day JHtml will call JFactory::getDocument()->addStyleSheet() or JFactory::getDocument()->addScript().
Farahmand

1
@Fari Các tham số chỉ thay đổi từ 2.5 để loại bỏ hỗ trợ cho cách thực hiện 1.5. Nếu bạn sử dụng các tham số 3.x, chúng sẽ hoạt động tốt trong 2.5. Ngoài ra, khi viết trang Joomla Docs mà bạn tham chiếu, tôi thực sự khuyên bạn nên sử dụng JHtml nếu bạn đặt nội dung vào thư mục phương tiện để mọi người có thể ghi đè tập lệnh của bạn dễ dàng hơn (điều không thể với JDocument). Mặc dù như bạn nói nó không bắt buộc.
George Wilson

1
@GeorgeWilson Như đã đề cập trong liên kết tham chiếu ở trên: If you wish to just include a straight file path, in a template for example, then you are better using JDocument. However if you wish to take into account whether debug is enabled to include a compressed script or take advantage of template overridable scripts and stylesheets then using JHtml is generally better. It is recommended all 3rd Party Developers use JHtml to allow template overrides of their CSS and javascript for template designers.Vậy J! nhà phát triển trang web sử dụng JDocument và nhà phát triển mở rộng công khai của bên thứ 3 có thể sử dụng JHtml.
Farahmand
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.