私はこれが少し古いこの質問であることを知っていますが、同じことを思っていましたが、サブドメインに基づいて複数のモジュールの位置を作成できる少しの追加コードでテンプレートのindex.phpファイルを変更した場合に私が思いついた解決策はここにあります、次に適切なメニュー項目を関連するサブドメインに割り当てます。
$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; ?>
上記の例では、$ subで始まる行が独自のWebサイト用にカスタマイズする必要があります。現在の例では、サブドメインに応じてナビゲーションモジュール用のスペースを作成します。これは、2つのサブドメインと一般的なドメインなので、サブドメインごとに3つのナビゲーション位置(navigationhome navigationplusとnavigationgroup)を作成します。
コードで注意すべきいくつかの点-
サブドメインを見つけるには、関数in_arrayを使用しました。$ dom [1]でswitchステートメントを使用してサブドメインを見つけることもできましたが、wwwが$ dom [1]にあるため、誰かがwww.plus.mysite.co.ukのようなものを入力した場合、これは機能しません...例えば
switch ( $dom[1] )
{
case 'group' : $sub = 'group' ; break ;
case 'plus' : $sub = 'plus' ; break ;
default : $sub = 'home' ; break ;
}
最初の分解では、str_replaceを使用して//をに置き換えます。これは、最初のhttp / httpsがそれ自体の配列で終わるようにするためです($ dom [0]には常にhttp / httpsが含まれます。これは、ロードされたプロトコルに応じて異なるサイトを表示したい場合に使用できます。そこにいなかった場合、誰かがhttp://plus.mysite.co.ukのようなものに入れられた場合、最初の配列にはhttp:// plusが含まれ、in_arrayは一致を返しません。
サブドメインがサイトドメインと同じである場合は、それが?の最後のドメインであることを確認する必要があることに注意してください。:ステートメントチェーンそれ以外の場合、それ自体が他のサブドメインに割り当てられます-たとえば、2つのサブドメインがあり、1つはsite.site.co.uk、もう1つはsite1.site.co.ukと呼ばれる場合、次のステートメントが機能します。
$sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'site' ) ) ;
//it never reaches the in_array ( 'site' ) if sub domain is site1
しかし、これらのどちらもその状況では適切に機能しません...
$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
この方法でこれらを使用することはほとんどありませんが、注目に値します。