Je sais que cette question est un peu ancienne, mais je me demandais la même chose et voici la solution que j'ai trouvée si vous modifiez le fichier templates index.php avec un peu de code supplémentaire, vous pouvez créer plusieurs positions de module en fonction du sous-domaine , puis vous affectez l'élément de menu correct au sous-domaine correspondant.
$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; ?>
Dans l'exemple ci-dessus, la ligne commençant par $ sub est ce que vous devez personnaliser pour votre propre site Web.À l'heure actuelle, l'exemple crée un espace pour un module de navigation en fonction du sous-domaine - cela a été créé pour un site avec deux sous-domaines et un domaine général et crée ainsi trois positions de navigation pour chaque sous-domaine - navigationhome navigationplus et navigationgroup.
Quelques points à noter avec le code -
pour trouver le sous-domaine, j'ai utilisé la fonction in_array. J'aurais pu utiliser une instruction switch sur $ dom [1] pour trouver le sous-domaine mais cela ne fonctionnerait pas si quelqu'un tapait quelque chose comme www.plus.mysite.co.uk car www serait dans $ dom [1] ... par exemple
switch ( $dom[1] )
{
case 'group' : $sub = 'group' ; break ;
case 'plus' : $sub = 'plus' ; break ;
default : $sub = 'home' ; break ;
}
l'explosion initiale utilise str_replace pour remplacer // par. c'est pour que le http / https initial finisse dans son propre tableau ($ dom [0] contiendra toujours le http / https qui je suppose pourrait être utilisé plus loin si vous vouliez montrer différents sites en fonction du protocole chargé, si cela n'était pas là alors quelqu'un a mis quelque chose comme http://plus.mysite.co.uk alors le premier tableau contiendrait http: // plus et in_array ne retournerait aucune correspondance.
Gardez à l'esprit que si le sous-domaine est le même que le domaine du site, vous devez vous assurer qu'il est le dernier du? : chaîne d'instructions, sinon elle se attribuera à d'autres sous-domaines - par exemple, si vous aviez deux sous-domaines, l'un appelé site.site.co.uk et l'autre site1.site.co.uk, l'instruction suivante fonctionnerait
$sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'site' ) ) ;
//it never reaches the in_array ( 'site' ) if sub domain is site1
mais ni l'un ni l'autre ne fonctionnerait correctement dans cette situation ...
$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
Il est peu probable que vous les utilisiez de cette manière, mais il convient de le noter.