Il modo migliore per includere file CSS / JS nella mia estensione personalizzata


8

Se devo includere file CSS o JS nelle mie estensioni personalizzate, quale sarebbe il modo migliore e più sicuro per raggiungere questo obiettivo:

  1. Devo inserirli in una cartella specifica nel mio file zip di estensione?
  2. Come devo dichiarare i file nel mio manifest XML?
  3. Come posso includere i file nell'intestazione Joomla (solo quando necessario)?

Risposte:


7

Il modo migliore sarebbe usare la cartella multimediale. Quindi, dovrai prima creare una cartella chiamata medianella cartella del tuo modulo.

Nota: questa cartella deve essere creata prima dell'installazione, non dopo.

All'interno della cartella multimediale, creare 2 sottocartelle csse js. Questo non è necessario ma è solo più bello tenere le cose separate.

Quindi aggiungi quanto segue al tuo file XML:

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

Passa mod_EXAMPLEa qualunque sia il tuo modulo.

Al momento dell'installazione, la cartella multimediale verrà automaticamente spostata e si otterrà quanto segue:

JOOMLA_ROOT/media/mod_EXAMPLE/js

e

JOOMLA_ROOT/media/mod_EXAMPLE/css

So che finora mi sono riferito a un modulo, ma lo stesso vale anche per i componenti.

Per chiamare il file, puoi aggiungere il seguente codice al tuo file default.php per la tua estensione:

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

Spero che sia di aiuto


2
È inoltre possibile eseguire il JHtml::stylesheet("mod_EXAMPLE/style.css", array(), true)caricamento media/mod_EXAMPLE/css/style.css(notare la css/parte aggiuntiva ) e il JHtml::script("mod_EXAMPLE/script.js", false, true)caricamento media/mod_EXAMPLE/js/script.js(notare la js/parte aggiuntiva ).
Flimm,

2
  1. Presumo che la tua estensione sia un componente. Il modo migliore è creare una mediadirectory accanto admine sitedirectory. Poi mettere js, csse imgfile all'interno di directory separate come questo:

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

    Si noti che qualsiasi cartella dovrebbe avere un index.htmlfile vuoto .

  2. Nel tuo manifest XML (YOUR_COMPONENT_NAME.xml), puoi dichiarare il mediafile in questo modo:

    <media destination="com_YOUR_COMPONENT_NAME" folder="media">
        <filename>index.html</filename>
        <folder>css</folder>
        <folder>js</folder>
        <folder>img</folder>
    </media>
    
  3. Modifica la vista predefinita (default.php) e aggiungi queste righe per includere i file in Joomla! testa:

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

JHtmldovrebbe essere usato per importare file CSS e JS piuttosto che addStyleSheete addScript: docs.joomla.org/J3.x:Adding_JavaScript_and_CSS_to_the_page
Lodder

@Lodder No, non dovrebbe. Il punto è che i parametri di JHtml::script()e JHtml::stylesheet()sono cambiati: docs.joomla.org/Potential_backward_compatibility_issues_in_Joomla_3_and_Joomla_Platform_12.2
Farahmand

@Lodder Per quanto riguarda il tuo riferimento :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 I parametri sono cambiati solo dalla 2.5 per rimuovere il supporto per il modo 1.5 di fare le cose. Se usi i parametri 3.x funzioneranno bene in 2.5. Anche dopo aver scritto la pagina di Joomla Documenti a cui hai fatto riferimento, ti consiglio vivamente di usare JHtml se stai inserendo elementi nella cartella multimediale in modo che le persone possano ignorare più facilmente i tuoi script (cosa impossibile con JDocument). Anche se come dici tu non è obbligatorio.
George Wilson,

1
@GeorgeWilson Come menzionato nel link sopra citato: 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.Quindi J! gli sviluppatori del sito utilizzano JDocument e gli sviluppatori di estensioni pubbliche di terze parti possono utilizzare JHtml.
Farahmand,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.