Melhor maneira de incluir arquivos CSS / JS na minha extensão personalizada


8

Se eu precisar incluir arquivos CSS ou JS em minhas extensões personalizadas, qual seria a melhor e mais segura maneira de conseguir isso:

  1. Devo colocá-los em uma pasta específica no meu arquivo zip de extensão?
  2. Como devo declarar os arquivos no meu manifesto XML?
  3. Como incluo os arquivos no cabeçalho do Joomla (somente quando necessário)?

Respostas:


7

A melhor maneira seria usar a pasta de mídia. Portanto, primeiro você precisará criar uma pasta chamada mediana pasta do módulo.

Nota: Esta pasta deve ser criada antes da instalação, não depois.

Dentro da pasta de mídia, crie 2 subpastas csse js. Isso não é necessário, mas é melhor manter as coisas separadas.

Em seguida, adicione o seguinte ao seu arquivo XML:

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

Mude mod_EXAMPLEpara qualquer que seja o seu módulo.

Após a instalação, a pasta de mídia será movida automaticamente e você terminará com o seguinte:

JOOMLA_ROOT/media/mod_EXAMPLE/js

e

JOOMLA_ROOT/media/mod_EXAMPLE/css

Sei até agora que me refiro a um módulo, mas o mesmo se aplica a componentes também.

Para chamar o arquivo, você pode adicionar o seguinte código ao arquivo default.php da sua extensão:

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

Espero que isto ajude


2
Você também pode fazer o JHtml::stylesheet("mod_EXAMPLE/style.css", array(), true)carregamento media/mod_EXAMPLE/css/style.css(observe a css/parte adicional ) e o JHtml::script("mod_EXAMPLE/script.js", false, true)carregamento media/mod_EXAMPLE/js/script.js(observe a js/parte adicional ).
Flimm

2
  1. Presumo que sua extensão seja um componente. A melhor maneira é criar um mediadiretório ao lado de admine sitediretórios. Em seguida js, coloque csse imgarquivos em diretórios separados como este:

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

    Observe que qualquer pasta deve ter um index.htmlarquivo vazio .

  2. No seu manifesto XML (YOUR_COMPONENT_NAME.xml), você pode declarar um mediaarquivo como este:

    <media destination="com_YOUR_COMPONENT_NAME" folder="media">
        <filename>index.html</filename>
        <folder>css</folder>
        <folder>js</folder>
        <folder>img</folder>
    </media>
    
  3. Edite a visualização padrão (default.php) e adicione estas linhas para incluir os arquivos no Joomla! cabeça:

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

JHtmldeve ser usado para CSS importação e arquivos JS em vez de addStyleSheete addScript: docs.joomla.org/J3.x:Adding_JavaScript_and_CSS_to_the_page
Lodder

@Lodder Não, não deveria. O ponto é que os parâmetros JHtml::script()e JHtml::stylesheet()são alteradas: docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3_and_Joomla_Platform_12.2
Farahmand

@Lodder Quanto à sua referência :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

11
@Fari Os parâmetros foram alterados apenas de 2.5 para remover o suporte para a maneira 1.5 de fazer as coisas. Se você usar os parâmetros 3.x, eles funcionarão bem no 2.5. Também tendo escrito a página do Joomla Docs que você referenciou, recomendo fortemente que você use JHtml se estiver colocando coisas na pasta media para que as pessoas possam substituir seus scripts com mais facilidade (algo que não é possível com o JDocument). Embora, como você diz, não seja obrigatório.
George Wilson

11
@ Georgeorge Wilson Como mencionado no link acima mencionado: 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.So J! desenvolvedores de sites usam JDocument e desenvolvedores de extensões públicas de terceiros podem usar JHtml.
Farahmand
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.