So che questa domanda è un po 'vecchia, ma mi chiedevo la stessa cosa ed ecco la soluzione che mi è venuta in mente se cambiassi il file index.php dei template con un po' di codice extra potresti creare più posizioni del modulo in base al sottodominio e quindi si assegna la voce di menu corretta al sottodominio pertinente.
$dom = explode ( '.', str_replace ( '//', '.', JURI::base () ) ) ;
$sub = ( in_array ( 'plus', $dom ) ? 'plus' : ( in_array ('group', $dom) ? 'group' : 'home' ) ) ;
if ($this->countModules('navigation'.$sub )) : ?>
<nav class="navigation">
<jdoc:include type="modules" name="navigation<?php echo $sub ?>" style="html5" />
</nav>
<?php endif; ?>
Nell'esempio sopra la riga che inizia con $ sub è ciò che dovresti personalizzare per il tuo sito web, attualmente l'esempio crea uno spazio per un modulo di navigazione a seconda del sottodominio - questo è stato creato per un sito con due sottodomini e un dominio generale e quindi crea tre posizioni di navigazione per ciascun sottodominio: navigationhome navigationplus e navigationgroup.
Alcune cose da notare con il codice:
per trovare il sottodominio ho usato la funzione in_array. Avrei potuto usare un'istruzione switch su $ dom [1] per trovare il sottodominio ma questo non funzionerebbe se qualcuno digitasse qualcosa come www.plus.mysite.co.uk come www sarebbe in $ dom [1] ... per esempio
switch ( $dom[1] )
{
case 'group' : $sub = 'group' ; break ;
case 'plus' : $sub = 'plus' ; break ;
default : $sub = 'home' ; break ;
}
l'esplosione iniziale usa str_replace per sostituire // con. questo in modo che l'http / https iniziale finisca nel suo array ($ dom [0] conterrà sempre l'http / https che suppongo possa essere utilizzato ulteriormente se si desidera mostrare siti diversi a seconda del protocollo caricato, se quello non c'era allora qualcuno è messo in qualcosa come http://plus.mysite.co.uk quindi il primo array conterrebbe http: // plus e in_array non restituirebbe alcuna corrispondenza.
Tieni presente che se il sottodominio è uguale al dominio del sito, devi assicurarti che sia l'ultimo nel? : catena di istruzioni altrimenti si assegnerà ad altri sottodomini - ad es. se avessi due sottodomini uno chiamato site.site.co.uk e l'altro site1.site.co.uk la seguente istruzione funzionerebbe
$sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'site' ) ) ;
//it never reaches the in_array ( 'site' ) if sub domain is site1
ma nessuno di questi funzionerebbe correttamente in quella situazione ...
$sub = ( in_array ( 'site' ) ? 'site' : ( in_array ( 'site1' ) ? 'site1' : 'main' ) ) ;
// all domains would be referred to as site because XXX.site.co.uk provides a match
$sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'main' ) ) ;
// www.site.co.uk would still be site and not main
È improbabile che li utilizzeresti in questo modo, ma vale la pena notare.