web-dev-qa-db-fra.com

Comment créer un élément de menu sur un sous-domaine différent?

Je veux créer une structure de menu comme celle-ci dans Joomla 2.5:

  • Racine (www.example.com)
    • À propos de (www.example.com/about)
    • Site a (a.example.com)
    • Site b (b.example.com)

Est-il possible de créer des éléments de menu avec différents sous-domaines et comment les créer? J'ai déjà travaillé avec le CMS "typo3" et cela ne m'a posé aucun problème, mais une longue recherche sur Internet ne m'a pas aidée à résoudre ce problème.

EDIT: Notez que a.example.com et b.example.com sont sur la même installation de Joomla, j'aimerais donc créer un nouvel "Article unique" avec un sous-domaine.

8
Marc T.

Je ne l'ai pas essayé, mais Artio JoomSef prétend fournir une telle fonctionnalité.
Vous pouvez spécifier des sections de votre site Web à utiliser pour différents sous-domaines. Il pourrait être digne de le vérifier.

documentation Artio JoomSEF

JoomSEF - Subdomains configuration

Si vous recherchez des configurations plus complexes, les extensions Joomla MultiSites vous permettent d’exécuter de nombreux sites joomla, à partir d’une installation unique, avec différentes configurations. Un lien vers cette section JED est fourni dans une autre réponse ici.

4
FFrewin

Pour les éléments de menu que vous devez lier à vos sous-domaines, allez à:

menu-item parameters > menu item type > system links > choose "External URL"

Ensuite, dans le champ Link, vous pouvez saisir l’URL de vos sous-domaines.

2
web-tiki

Vous ne pouvez pas vraiment faire cela avec Joomla natif, mais vous pouvez utiliser une extension qui essaye de vous aider à le faire.

Vous pouvez les trouver à JED

1
Harald Leithner

Si vous ne souhaitez pas utiliser de composant externe pour cela, vous pouvez créer une URL externe dans votre menu pointant vers a.example.com et utilisez votre .htaccess fichier pour obtenir le contenu du lien existant de votre site.

Par exemple

<IfModule mod_rewrite.c>
    RewriteEngine on

    RewriteCond %{HTTP_Host} ^a.example.com
    RewriteRule ^(.*) http://example.com/$1 [P]
</IfModule>

Supposons que si votre utilisateur visite cette URL a.example.com/user/sd, alors le contenu sera de example.com/user/sd _ sans changer l'URL réelle du navigateur.

Ne choisissez cette méthode que si vous connaissez bien .htaccess utilisation du fichier et ok avec édition manuelle. Ceci est utile si vous ne voulez pas utiliser la nouvelle extension entière pour seulement quelques URL.

1
SD.

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 modifiiez le fichier templates index.php avec un peu de code supplémentaire, vous pourriez créer plusieurs positions de module basées sur le sous-domaine. , puis vous affectez l’élément de menu approprié au sous-domaine approprié.

    $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, cet exemple crée un espace pour un module de navigation en fonction du sous-domaine. Il 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 pourrait être utilisé si vous vouliez montrer différents sites en fonction du protocole chargé, si cela n'était pas là alors quelqu'un est mis dans quelque chose comme http://plus.mysite.co.uk alors le premier tableau contiendrait http: // plus et in_array serait ne retourne aucun match.

Gardez à l'esprit que si le sous-domaine est identique au domaine de site, vous devez vous assurer qu'il s'agit du dernier? : chaîne d'instructions, sinon il va s’affecter à 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 fonctionneraient 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 cela vaut la peine d'être noté.

0
TheKLF99