Ciao a tutti.
Prendo spunto da questo
post per proporre una soluzione a chi, come me, avesse l'esigenza di visualizzare due (o più) template diversi in base a dove si trova il navigatore.
Nel mio caso specifico il problema nasce dal fatto che il template da visualizzare nella home page ha una certa conformazione, mentre per tutto il resto ne deve avere un'altra. I due template hanno in comune solo la posizione blocchi modulo nella quale visualizzare il mainmenu mentre le altre posizioni sono distribuite in maniera diversa.
La soluzione che ho trovato io è questa:
creare anzitutto due file distinti (li ho chiamati index_1.php e index_2.php) ognuno dei quali contiene tutto il codice del template racchiuso tra i tag <BODY> e </BODY></HTML>.
il file index.php contiene invece il seguente codice:
<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
$iso = split( '=', _ISO );
echo '<?xml version="1.0" encoding="'. $iso[1] .'"?' .'>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php mosShowHead(); ?>
<meta http-equiv="Content-Type" content="text/html; <?php echo _ISO; ?>" />
<link href="<?php echo $mosConfig_live_site;?>/templates/<?php echo $cur_template;?>/css/template_css.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="<?php echo $mosConfig_live_site;?>/images/favicon.ico" />
<?php if ( $my->id ) { initEditor(); } ?>
</head>
<?php
//Decido quali template caricare
$option = strval( strtolower( mosGetParam( $_REQUEST, 'option' ) ) );
$Itemid = intval( mosGetParam( $_REQUEST, 'Itemid', null ) );
if (($option == 'com_frontpage') && ($Itemid = 1)) {
include_once('index_1.php');
}else{
include_once('index_2.php');
}
?>
Come vedete la parte iniziale è il classico codice presente in tutti i template di joomla (ver. 1.0.x)
L'ultima parte invece è quella che stabilisce quale dei due "corpi" del template (index_1.php o index_2.php) verranno caricati:
<?php
$option = strval( strtolower( mosGetParam( $_REQUEST, 'option' ) ) );
$Itemid = intval( mosGetParam( $_REQUEST, 'Itemid', null ) );
if (($option == 'com_frontpage') && ($Itemid = 1)) {
include_once('index_1.php');
}else{
include_once('index_2.php');
}
la decisione si basa sui valori contenuti nelle variabili $option e $Itemid. Queste due variabili vengono riempite con ciò che viene passato al file index.php al momento del suo caricamento.
Se guardate l'indirizzo che compare nella barra degli indirizzi del browser vedrete una cosa simile:
www.miosito.it/index.php?option=com_frontpage&Itemid=1
le due istruzioni php
$option = strval( strtolower( mosGetParam( $_REQUEST, 'option' ) ) );
$Itemid = intval( mosGetParam( $_REQUEST, 'Itemid', null ) );
Non fanno altro che prelevare i valori contenuti nei parametri option e itemid passati al file index.php.
Solo quanto si clicca sulla voce di menu Home del menù principale option conterrà il valore "com_frontpage" e itemid il valore 1.
Adesso, se qualcuno avesse delle alternative a questa soluzione (ammetto la mia fallibilità

) è vivamente pregato di postarla. Alla fine faremo una bella miniguida per fare felice surfbit

Ciao