Я знаю, что этот вопрос немного устарел, но мне было интересно то же самое, и вот решение, которое я придумала, если вы измените файл templates.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, - это то, что вам нужно настроить для своего собственного веб-сайта. В настоящее время в примере создается пространство для модуля навигации в зависимости от субдомена - оно было создано для сайта с двумя субдоменами и общий домен и поэтому он создает три позиции навигации для каждого субдомена - navigationhome navigationplus и navigationgroup.
Несколько вещей, чтобы отметить с кодом -
чтобы найти поддомен, я использовал функцию in_array. Я мог бы использовать оператор switch в $ dom [1], чтобы найти поддомен, но это не сработало бы, если бы кто-нибудь набрал что-то вроде www.plus.mysite.co.uk, так как www был бы в $ dom [1] ... например
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 не возвращал бы совпадение.
Помните, что если субдомен совпадает с доменом сайта, то вам нужно убедиться, что он является последним в? : цепочка операторов, в противном случае она будет присваиваться другим поддоменам - например, если у вас есть два поддомена, один из которых называется site.site.co.uk, а другой 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
Маловероятно, что вы будете использовать их таким образом, но это стоит отметить.