Ich weiß, dass diese Frage etwas alt ist, aber ich habe mich das Gleiche gefragt. Hier ist die Lösung, die ich gefunden habe, wenn Sie die Datei index.php der Vorlagen mit etwas zusätzlichem Code ändern und mehrere Modulpositionen basierend auf der Subdomain erstellen können und weisen Sie dann der entsprechenden Subdomain den richtigen Menüpunkt zu.
$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; ?>
Im obigen Beispiel ist die Zeile, die mit $ sub beginnt, das, was Sie für Ihre eigene Website anpassen müssen. Derzeit wird im Beispiel je nach Subdomain ein Platz für ein Navigationsmodul erstellt. Dies wurde für eine Site mit zwei Subdomains und a erstellt allgemeine Domain und so werden drei Navigationspositionen für jede Subdomain erstellt - Navigationshausnavigationsplus und Navigationsgruppe.
Ein paar Dinge, die Sie mit dem Code beachten sollten -
Um die Subdomain zu finden, habe ich die Funktion in_array verwendet. Ich hätte eine switch-Anweisung für $ dom [1] verwenden können, um die Subdomain zu finden, aber dies würde nicht funktionieren, wenn jemand etwas wie www.plus.mysite.co.uk wie www in $ dom [1] eingeben würde ... z.B
switch ( $dom[1] )
{
case 'group' : $sub = 'group' ; break ;
case 'plus' : $sub = 'plus' ; break ;
default : $sub = 'home' ; break ;
}
Die anfängliche Explosion verwendet str_replace, um // durch zu ersetzen. Dies ist so, dass das anfängliche http / https in einem eigenen Array landet ($ dom [0] enthält immer das http / https, das vermutlich weiter verwendet werden könnte, wenn Sie je nach geladenem Protokoll unterschiedliche Sites anzeigen möchten, falls dies der Fall ist Wäre da nicht, würde jemand so etwas wie http://plus.mysite.co.uk einfügen, dann würde das erste Array http: // plus enthalten und in_array würde keine Übereinstimmung zurückgeben.
Denken Sie daran, dass Sie sicherstellen müssen, dass die Subdomain die letzte in der? Ist, wenn sie mit der Site-Domain identisch ist. : Anweisungskette, andernfalls wird es sich anderen Subdomänen zuweisen - z. B. wenn Sie zwei Unterdomänen hätten, eine mit dem Namen site.site.co.uk und die andere mit dem Namen site1.site.co.uk, würde die folgende Anweisung funktionieren
$sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'site' ) ) ;
//it never reaches the in_array ( 'site' ) if sub domain is site1
aber keines davon würde in dieser Situation richtig funktionieren ...
$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
Es ist unwahrscheinlich, dass Sie diese auf diese Weise verwenden, aber es ist erwähnenswert.