Joomlashow arrow Articoli arrow Template Joomla con zone collassabili

Template Joomla con zone collassabili

12-02-2008 13:13

Scritto da Bigham

Mi è capitato spesso di vedere template joomla a 2, 3 colonne con delle zone modulo collassabili.
Per collassabili intendo dire zone che caricano un certo numero di "posizioni" o "blocchi"di moduli e che qual'ora in queste posizioni non vi sia presente alcun modulo pubblicato, queste zone automaticamente non vengono visualizzate, lasciando più spazio per i contenuti nel nostro template.
In questo caso analizzeremo un sistema che non utilizza tabelle per l'impaginazione dei contenuti.

L'articolo è la traduzione di quello riportato su You Joomla

Vediamo quali sono i principi con i quali realizzare questo tipo di template.

 

Anzitutto creiamo un identificativo di classe nel foglio di stile del template template_css.css:

#contenitore_moduli{
  width:100%;
  margin:0 auto;
  text-align:center;
  color:#000;} 

Questo identificativo verrà utilizzato per dimensionare e formattare il contenitore dei moduli collassabili.
Ora decidiamo quanti moduli collassabili vogliamo gestire. Ad esempio ne imposteremo 4.
Aggiungiamo nel foglio di stile:

#mod1,#mod2,
#mod3,#mod4{
text-align:left;
 
float:left; /*Questo è il trucco!*/}

Questa sarà la struttura dei container che conterranno i moduli:

<div id="contenitore_moduli">
        <div id="mod1"> </div>
        <div id="mod2"> </div>
        <div id="mod3"> </div>
        <div id="mod4"> </div>
</div>

Come vedete esiste un continer principale di classe "contenitore_moduli" e al suo interno 4 container, uno per ogni modulo.

Vediamo adesso come applicare il collasso dei moduli utilizzando il codice php:

<?php if (mosCountModules('user1')||
            (mosCountModules('user2')||
            (mosCountModules('user3')||
            (mosCountModules('user4')) { ?>
<!-- Questa istruzione recita:
se ognuno dei seguenti moduli è pubblicato, Visualizza il container principale.
Il container principale collasserà se nessuno dei moduli è pubblicato -->
 
<div id="contenitore_moduli"><!-- Inizio container principale -->
<?php if (mosCountModules('user1')) {?><!-- Questo per far collassare un modulo -->
   <div id="mod1"><?php mosLoadModules('user1',-2);?></div><?php } ?>
<?php if (mosCountModules('user2')) {?>
   <div id="mod2"><?php mosLoadModules('user2',-2);?></div><?php } ?>
<?php if (mosCountModules('user3')) {?>
   <div id="mod3"><?php mosLoadModules('user3',-2);?></div><?php } ?>
<?php if (mosCountModules('user4')) {?>
    <div id="mod4"><?php mosLoadModules('user4',-2);?></div><?php } ?>
</div><?php } ?><!-- Fine container principale-->

La funzione mosCountModules('nome_zona_modulo') consente di sapere se in una particolare

zona_modulo è pubblicato uno o più moduli. La funzione infatti conta quanti moduli sono pubblicati.

La funzione mosLoadModules() consente di visualizzare un modulo in una zona modulo

Adesso scriviamo il codice che ci consente di capire quanti moduli sono presenti e quanto dovrà essere larga la zona che li conterrà.
Questo codice andrà inserito tra i tag e del template:

$nmod = 0;
if (mosCountModules('user1')) $shelf++;
if (mosCountModules('user2')) $shelf++;
if (mosCountModules('user3')) $shelf++;
if (mosCountModules('user4')) $shelf++;
// se sono pubblicati 4 moduli
if ( $nmod == 4 ) {
  $modwidth = '24%'; // ogni modulo sar&agrave; largo il 24%
// se sono pubblicati 3 moduli
}if ( $nmod == 3 ) {
  $modwidth = '33.3%'; // ogni modulo sar&agrave; largo il 33.3%
// se sono pubblicati 2 moduli
}if ( $nmod == 2 ) {
  $modwidth = '49%'; // ogni modulo sar&agrave; largo il 49%
} else if ($nmod == 1) { // se &egrave; pubblicato 1 modulo
  $modwidth = '100%'; // il modulo sar&agrave; largo il 100%
}
?>

La variabile $nmod conterrà il numero di moduli pubblicati mentre la variabile $modwidth conterrà
la dimensione della zona in cui saranno pubblicati i moduli. E' evidente che se non sono pubblicati
moduli la dimensione della zona sarà zero.
Questo comporterà la scomparsa della zona sulla pagina.
Questo codice va inserito prima di definire la struttura del template. Ho utilizzato le zone da user1 a user4 a titolo esemplificativo, ma è possibile utilizzare qualsiasi altro nome di zone blocchi modulo.

Vediamo come applicare le variabili definite in base al codice sopra riportato:

<?php if (mosCountModules('user1')||
            (mosCountModules('user2')||
            (mosCountModules('user3')||
            (mosCountModules('user4')) { ?>
 
<div id="myshelf"><!-- Inizio Contenitore principale-->
 
<?php if (mosCountModules('user1')) {?>
<div id="mod1" style="width:<?php echo $modwidth ?>;" >
       <?php mosLoadModules('user1',-2);?></div><?php } ?>
<?php if (mosCountModules('user2')) {?>
<div id="mod2" style="width:<?php echo $modwidth ?>;" >
       <?php mosLoadModules('user2',-2);?></div><?php } ?>
<?php if (mosCountModules('user3')) {?>
<div id="mod3" style="width:<?php echo $modwidth ?>;" >
       <?php mosLoadModules('user3',-2);?></div><?php } ?>
<?php if (mosCountModules('user4')) {?>
<div id="mod4" style="width:<?php echo $modwidth ?>;" >
       <?php mosLoadModules('user4',-2);?></div><?php } ?>
 
</div>!-- Fine Contenitore principale-->

Nel caso vogliate usare questo sistema con Joomla 1.5 dovrete fare una sostituzione:

 
mosCountModules("posizione") <b>con</b> $this->countModules("posizione")

inoltre la sintassi che carica i moduli è diversa:

 
<?php mosLoadModules('user4',-2);?>
<b>diventa</b>
<jdoc:include type="modules" name="user4" style="xtml" />

Definiamo adesso le classi standard di joomla per la formattazione dei moduli:

 
#mod1 .moduletable,#mod2 .moduletable,
#mod3 .moduletable,#mod4 .moduletable{
  text-align:left;
  padding:5px;
  color:#000;
  font-size:1.1em;
}
 
#mod1 .moduletable h3,#mod2 .moduletable h3,
#mod3 .moduletable h3,#mod4 .moduletable h3{
  text-align:left;
  padding-left:5px;
  color:#ff6600;
  font-size:1.3em;
 
}

Per capire meglio il funzionamento potete vedere la Demo

Commenti utenti  

Visualizza 1 di 1 commenti

Problema template themza colorful world"

Ho letto l'articolo ma non riesco a rendere collassabile la colonna di destra di questo template che prevede tre colonne fisse.(http:// template.joomla.it/) 
Vorrei che solo nella home page ci fosse la colonna di destra... 
Mi dai qualche indicazione su come modificarlo? 
grazie mille

Scritto da: kazikamuntu (Guest) 04-09-2008 16:26

Aggiungi il tuo commento

Nome
E-mail
Titolo  
Commento
 

Caratteri rimasti: 1000

   
   
   
‹ Precedente   Successivo ›

Login

Hai dimenticato la password?

Registrati