Лучший способ включить файлы CSS / JS в мое собственное расширение

8

Если мне нужно включить файлы CSS или JS в свои пользовательские расширения, каков будет лучший и безопасный способ добиться этого:

  1. Должен ли я поместить их в определенную папку в моем zip-файле расширения?
  2. Как мне объявить файлы в моем XML-манифесте?
  3. Как включить файлы в заголовок Joomla (только при необходимости)?
Bogowoe
источник

Ответы:

7

Наилучшим способом будет использование папки мультимедиа. Итак, сначала вам нужно будет создать папку с именем mediaв папке вашего модуля.

Примечание. Эта папка должна быть создана до установки, а не после.

Внутри папки мультимедиа создайте 2 подпапки cssи js. Это не обязательно, но лучше держать вещи отдельно.

Затем добавьте следующее в ваш XML-файл:

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

Перейдите mod_EXAMPLEна любой другой модуль.

После установки папка мультимедиа будет автоматически перемещена, и вы получите следующее:

JOOMLA_ROOT/media/mod_EXAMPLE/js

а также

JOOMLA_ROOT/media/mod_EXAMPLE/css

Я знаю, что я имел в виду модуль, но то же самое относится и к компонентам.

Чтобы вызвать файл, вы можете добавить следующий код в ваш файл default.php для вашего расширения:

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

Надеюсь это поможет

Лоддер
источник
2
Вы также JHtml::stylesheet("mod_EXAMPLE/style.css", array(), true)можете загрузить media/mod_EXAMPLE/css/style.css(отметить дополнительную css/часть) и JHtml::script("mod_EXAMPLE/script.js", false, true)загрузить media/mod_EXAMPLE/js/script.js(обратите внимание на дополнительную js/часть).
Flimm
2
  1. Я предполагаю, что ваше расширение является компонентом. Лучший способ - создать mediaкаталог рядом adminс siteкаталогами. Затем положить js, cssи imgфайлы внутри отдельных каталогов , как это:

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

    Обратите внимание, что в любой папке должен быть пустой index.htmlфайл.

  2. В своем XML-манифесте (YOUR_COMPONENT_NAME.xml) вы можете объявить mediaфайл следующим образом:

    <media destination="com_YOUR_COMPONENT_NAME" folder="media">
        <filename>index.html</filename>
        <folder>css</folder>
        <folder>js</folder>
        <folder>img</folder>
    </media>
    
  3. Отредактируйте представление по умолчанию (default.php) и добавьте эти строки, чтобы включить файлы в Joomla! глава:

    $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';
    
Farahmand
источник
JHtmlследует использовать для импорта CSS и JS - файлов , а не addStyleSheetи addScript: docs.joomla.org/J3.x:Adding_JavaScript_and_CSS_to_the_page
Лоддер
@ Лоддер Нет, не должен. Дело в том, что параметры JHtml::script()и JHtml::stylesheet()изменены: docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3_and_Joomla_Platform_12.2
Farahmand
@Lodder Относительно вашей ссылки :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 Параметры изменились только с 2.5, чтобы убрать поддержку 1.5 способа работы. Если вы используете параметры 3.x, они будут нормально работать в 2.5. Кроме того, написав страницу Joomla Docs, на которую вы ссылались, я настоятельно рекомендую вам использовать JHtml, если вы помещаете материал в папку media, чтобы люди могли проще переопределять ваши скрипты (что невозможно с JDocument). Хотя, как вы говорите, это не обязательно.
Джордж Уилсон
1
@ GeorgeWilson Как уже упоминалось в ссылке выше, 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.так что J! разработчики сайтов используют JDocument, а сторонние разработчики публичных расширений могут использовать JHtml.
Фараманд