I know this is a bit old this question but I was wondering the same thing and here is the solution I came up with if you change the templates index.php file with a bit of extra code you could create multiple module positions based on the subdomain, and then you assign the correct menu item to the relevant subdomain.
$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; ?>
In the above example the line starting $sub is what you'd need to customise for your own website, at present the example creates a space for a navigation module depending on the subdomain - this was created for a site with two sub domains and a general domain and so it creates three navigation positions for each subdomain - navigationhome navigationplus and navigationgroup.
A few things to note with the code -
to find the subdomain I've used the function in_array. I could have used a switch statement on $dom[1] to find the subdomain but this wouldn't work if someone typed something like www.plus.mysite.co.uk as www would be in $dom[1]... e.g.
switch ( $dom[1] )
{
case 'group' : $sub = 'group' ; break ;
case 'plus' : $sub = 'plus' ; break ;
default : $sub = 'home' ; break ;
}
the initial explode uses str_replace to replace // with . this is so that the initial http / https ends up in it's own array ($dom[0] will always contain the http/https which I suppose could be used further if you wanted to show different sites depending on the protocol loaded, if that wasn't there then is someone put in something like http://plus.mysite.co.uk then the first array would contain http://plus and in_array would return no match.
Bear in mind that if the sub-domain is the same as the site domain then you'd need to make sure it's the last one in the ? : statement chain otherwise it will assign itself to other subdomains - e.g. if you had two sub domains one called site.site.co.uk and the other site1.site.co.uk the following statement would work
$sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'site' ) ) ;
//it never reaches the in_array ( 'site' ) if sub domain is site1
but neither of these would work properly in that 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
It's unlikely you'd be using these in this manner but it's worth noting.