it-swarm.it

Come posso creare una voce di menu su un sottodominio diverso?

Voglio creare una struttura di menu come questa in Joomla 2.5:

  • Root (www.example.com)
    • Di (www.example.com/about)
    • Sito a (a.example.com)
    • Sito b (b.example.com)

È possibile creare voci di menu con diversi sottodomini e come si creano? Ho lavorato con il CMS "typo3" in precedenza e non ci sono stati problemi a farlo, ma una lunga ricerca su Internet non mi ha aiutato con questo problema.

EDIT: Nota che a.example.com e b.example.com sono sulla stessa installazione di Joomla, quindi mi piacerebbe creare un nuovo "Articolo singolo" con un sottodominio.

8
Marc T.

Non l'ho provato, ma Artio JoomSef afferma di fornire tale funzionalità.
Puoi specificare sezioni del tuo sito web da utilizzare per diversi sottodomini. Potrebbe essere utile controllarlo.

documentazione Artio JoomSEF

JoomSEF - Subdomains configuration

Se stai cercando configurazioni più complesse, le estensioni Joomla MultiSites ti consentono di eseguire molti siti joomla, da un'unica installazione, con varie configurazioni. Un link a questa sezione JED è fornito in un'altra risposta qui.

4
FFrewin

Per le voci di menu che devi collegare ai tuoi sottodomini, vai a:

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

Quindi nel campo Link puoi digitare l'URL dei tuoi sottodomini.

2
web-tiki

Non puoi davvero farlo con Joomla nativo, ma puoi usare un'estensione che cerca di aiutarti a farlo.

Puoi trovarli su JED

1
Harald Leithner

Se non vuoi utilizzare un componente esterno per questo, puoi creare un URL esterno nel tuo menu che punta a a.example.com e usa il tuo .htaccess file per ottenere contenuti dal link esistente del tuo sito.

Per esempio

<IfModule mod_rewrite.c>
    RewriteEngine on

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

Supponiamo che se l'utente visita questo URL a.example.com/user/sd, il contenuto sarà di example.com/user/sd senza modificare l'URL effettivo sul browser.

Utilizza questo metodo solo se conosci bene .htaccess utilizzo dei file e ok con modifica manuale. Questo è utile se non vuoi usare l'intera nuova estensione per pochi URL.

1
SD.

So che questa domanda è un po 'vecchia, ma mi chiedevo la stessa cosa ed ecco la soluzione che mi è venuta in mente se cambiassi il file index.php dei template con un po' di codice extra potresti creare più posizioni del modulo in base al sottodominio e quindi si assegna la voce di menu corretta al sottodominio pertinente.

    $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; ?>

Nell'esempio sopra la riga che inizia con $ sub è ciò che dovresti personalizzare per il tuo sito web, attualmente l'esempio crea uno spazio per un modulo di navigazione a seconda del sottodominio - questo è stato creato per un sito con due sottodomini e un dominio generale e quindi crea tre posizioni di navigazione per ciascun sottodominio: navigationhome navigationplus e navigationgroup.

Alcune cose da notare con il codice:

per trovare il sottodominio ho usato la funzione in_array. Avrei potuto usare un'istruzione switch su $ dom [1] per trovare il sottodominio ma questo non funzionerebbe se qualcuno digitasse qualcosa come www.plus.mysite.co.uk come www sarebbe in $ dom [1] ... per esempio.

    switch ( $dom[1] )
    {
        case 'group' : $sub = 'group' ; break ;
        case 'plus' : $sub = 'plus' ; break ;
        default : $sub = 'home' ; break ;
    }

l'esplosione iniziale usa str_replace per sostituire // con. questo in modo che l'http/https iniziale finisca nel suo array ($ dom [0] conterrà sempre l'http/https che suppongo possa essere utilizzato ulteriormente se si desidera mostrare siti diversi a seconda del protocollo caricato, se quello non c'era allora qualcuno è messo in qualcosa come http://plus.mysite.co.uk allora il primo array conterrebbe http: // plus e in_array sarebbe non restituisce alcuna corrispondenza.

Tieni presente che se il sottodominio è uguale al dominio del sito, devi assicurarti che sia l'ultimo nel? : catena di istruzioni, altrimenti si assegnerà ad altri sottodomini - ad es. se avessi due sottodomini uno chiamato site.site.co.uk e l'altro site1.site.co.uk la seguente dichiarazione funzionerebbe

    $sub = ( in_array ( 'site1' ) ? 'site1' : ( in_array ( 'site' ) ? 'site' : 'site' ) ) ;
    //it never reaches the in_array ( 'site' ) if sub domain is site1

ma nessuno di questi funzionerebbe correttamente in quella situazione ...

    $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

È improbabile che li utilizzeresti in questo modo, ma vale la pena notare.

0
TheKLF99