Supporto volontario e collaborativo per Joomla!® in italiano

Caricare un modulo all'interno di un Componente

Valutazione attuale: 5 / 5

Stella attivaStella attivaStella attivaStella attivaStella attiva
 
effetto matriosca

In Joomla caricare un modulo è molto semplice: lo attivi, gli dai una posizione, gli dici in quale voce di menu va caricata, salvi.

In un template abbiamo tante posizioni dove poter caricare un modulo, e in ogni posizione possiamo caricare più moduli

Fin qui tutto ok, ma poi ti capita quella volta dove tutto questo non è sufficiente: e se volessimo caricare un modulo all'interno di un componente? come possiamo fare? Semplice: con le api di Joomla

Prima di tutto: dò per scontato che, chi sta leggendo questo articolo, sappa già un minimo di programmazione, di sviluppo di template, sappia cos'è un override, e conosca come funziona Joomla in generale.

Inserire una position in un template è molto semplice: basta andare nel file "index.php" del template e aggiungere la scritta:

Il problema però è che questa stringa può essere inserita nelle altre aree del template, possiamo usarlo solo nel file index.php, e non all'interno dell'override di un componente o di un altro modulo.

Quindi come facciamo a inserire una posizione all'interno di un override? Andiamo con ordine e vediamo come fare

Aggiungere posizione tramite api

Ipotizziamo di voler caricare un qualsiasi modulo, come una slide o un "social bookmark" (un insieme di link per la condivisione sui social di una pagina web) e di volerla posizionare all'interno di un componente, come ad esempio subito dopo il titolo dell'articolo.

Prima di tutto creiamo il modulo: per semplificare useremo un semplice modulo "html personalizzato", inseriamo tutti i parametri come se fosse un semplicissimo modulo, mettiamo titolo, testo, ecc.. nella voce "posizione" inseriamo un nome diverso da quelli presenti nel template che stiamo utilizzando (ad es. matriosca), e diciamo a Joomla! le pagine dove dovrà essere pubblicato il modulo.

<è>Il modulo è attivo e caricato all'interno del sito, ma visto che la position del nostro modulo non è caricata nel template, non verrà mostrato da nessuna parte nel nostro sito.

Creiamo ora override del componente, se siete su una versione di Joomla 3.x vi basta andare su: gestione estensioni->gestione template->template->(selezionare il vostro template)->crea override.

esempio override

Il componente che voglio modificare nel mio esempio è il componete "com_content" con la view "articolo", se vi esce il messaggio "override già esistente" nessun problema, passiamo direttamente alla fase successiva.

Andiamo nel file da modificare per creare override, nel nostro esempio sarà : "templates/(nome del template)/html/com-content/article/default.php"

Fin qui niente di nuovo, ora arriva la parte più difficile: andiamo a cercare il punto in cui viene caricato il titolo all'interno del componente, il codice da cercare può variare da template a template. Ma leggendo il codice sarà facile trovare dove scrivere il nostro codice. In genere basta cercare un tag h1,h2 0 h3, oppure cercare il parametro che richiama il titolo, disolito è :

 
$this->item->title;
 

esempio codice

Trovato il punto dove voler caricare il nostro modulo. carichiamolo tramite api, la stringa completa per il caricamento è:

 
<?php 
$modulo = &JFactory::getDocument()->loadRenderer('modules')->render('matriosca',array('style'=>'xhtml')); 
echo $modulo;
?>
 
Scritto così non torna molto comodo, vediamo come sfruttare al meglio la struttura a oggetti del nostro CMS:
 
<?php
$documento = &JFactory::getDocument();
// istanziamo gli oggetti globali del sito
$renderizza = $documento->loadRenderer('modules');
// carica oggetto loadRenderer di &JFactory::getDocument();
$parametri = array('style'=>'xhtml');
// definisce la tipologia di caricamento del modulo,  &egrave; equivalente di style="xhtml" all'interno di Jdoc
echo $renderizza->render('matriosca',$parametri);
// viene chiamato oggetto render di "loadRenderer",  dicendo che il modulo da richiamare è quello con posizione "matriosca" , attribuendogli il parametro  style="xhtml"  (assegnato tramite  la variabile $parametri),
?>
 

Questo codice è equivalente del nostro:

 
<jdoc:include type="modules" name="matriosca" style="xhtml" />
 

Ma caricato all'interno del nostro override.

Uno dei vantaggi della struttura a oggetti è che se vorrò caricare nuovamente un altro modulo, mi basterà scrivere:

 
echo $renderizza->render('modulo2',$parametri);
 

Se invece voglio caricare il modulo ma senza attribuirgli " style="xhtml" ", è sufficiente scrivere:

 
echo $renderizza->render('modulo2');
 


CommentaCommenta questo articolo sul forum

Ho scritto e condiviso questo articolo su Joomla.it, fallo anche tu. Invia ora un nuovo articolo!
Claudio Carrera
Alcune informazioni su di me:
Sviluppatore siti internet Brescia


Ho anche scritto:
         ✔ diventa autore su Joomla.it

Ultima versione di Joomla!®

downloadVer. 3.7.5 Stabile Italiana
Data di rilascio: 17 Agosto 2017
(leggi la notizia Demo online

Le migliori estensioni gratuite

Un elenco aggiornato con i link a più di 100 estensioni fra componenti, moduli e plugin gratuiti per Joomla! 3

Manuale in italiano

Manuale in italianoPer conoscere meglio Joomla!, le sue caratteristiche ed il metodo di utilizzo leggi il manuale tradotto in italiano.

Molto utili anche le risposte alle domande più frequenti: FAQ

Sicurezza del proprio sito Joomla!Leggi anche: Nozioni sulla sicurezza del proprio sito

Autori di articoli recenti

Invia un articolo!Scrivi un articolo su Joomla.it e ricevi i ricavi dalle pubblicità di Google Adsense!
Segui queste istruzioni, condividi e collabora con la community. L'elenco degli autori attivi sul sito.

Libri consigliati

Torna su

Joomla.it sui Social Network

JoomlaDay Italia

JoomlaDay

Newsletter

Inserisci qui la tua e.mail: