在我的自定义扩展中包括CSS / JS文件的最佳方法


8

如果我需要在自定义扩展中包括CSS或JS文件,那么实现此目标的最佳和最安全的方法是:

  1. 我应该将它们放在扩展文件夹中的特定文件夹中吗?
  2. 我应该如何在XML清单中声明文件?
  3. 如何在Joomla标头中包含文件(仅在需要时)?

Answers:


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 2015年

2
  1. 我假设您的扩展程序是一个组件。最好的方法是mediaadminsite目录旁边创建一个目录。然后把jscssimg里面像这样单独的目录中的文件:

    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';
    

JHtml应该用于导入CSS和JS文件,而不是addStyleSheetaddScriptdocs.joomla.org/J3.x
Lodder

@Lodder不,不应该。问题的关键是,这些参数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放入媒体文件夹中,以便人们可以更轻松地覆盖脚本(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。
Farahmand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.