Domanda

Un cliente vuole il suo negozio multistore da istituire in questo modo:

Questo è un esempio, ma ci possono essere molte sottocartelle più diversi. Qual è l'approccio migliore per gestire le sottocartelle diverse per le diverse Store Viste / siti web?

So che una soluzione è quella di creare sottocartelle chiamate de, en ecc e copiare i index.php e .htaccess nelle sottocartelle corrispondenti.

Ci può anche essere alcune soluzioni (link simbolici per index.php, la configurazione vhost invece di utilizzare .htaccess) per ridurre al minimo la duplicazione di file, ma mi piacerebbe trovare una soluzione in cui non ho a che fare tutti i cambiamenti nel file sistema, ma solo gestire tutto a seconda della configurazione.


Aggiorna

Abbiamo verificato con il supporto Enterprise che il modo migliore per farlo è attraverso la creazione di sottocartelle.

Abbiamo finito per fare in questo modo:

  • Creare una directory "languagefolders"
  • Creato una copia della index.php all'interno della directory insieme ad un .htaccess rettificato e link simbolici alle cartelle Magento (app /, errori /, ...)
  • link simbolici creati "de", "en", ecc all'interno della directory principale Magento che punta ai "languagefolders" directory

In questo modo siamo in grado di aggiungere una nuova lingua attraverso la creazione di un nuovo collegamento simbolico (ad esempio "fr").

È stato utile?

Soluzione

E 'molto facile per servire più domini / percorsi in base agli URL. Come detto, la configurazione più semplice (sola configurazione) è possibile quando i codici core/store uniche possono essere usati nel percorso come sottocartelle . Ciò richiede una delle seguenti:

  1. I visitatori sono legati al percorso sottocartella corretto inizialmente
  2. I visitatori è offerta la pagina di destinazione da cui selezionano il loro negozio e ricevono un cookie
  3. Alcuni meccanismo viene usato per impostare il tipo di esecuzione ed eseguire codice PHP prima maneggiare la risposta

Per quanto riguarda 3 #: dal 1.4 Magento, ha reso possibile per consentire al server Web per determinare il contesto in esecuzione ( sito web o negozio ), così come il codice particolare che dovrebbe essere usato. Da index.php :

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

considerando che le variabili di ambiente vengono utilizzate per inizializzare l'applicazione, è possibile influenzare il sistema prima di PHP anche girare in su. Con Apache e mod_rewrite questo può essere fatto per le sottocartelle con un po 'di inganno:

RewriteCond %{REQUEST_URI} ^/de/$
RewriteRule .* - [E=MAGE_RUN_CODE:deutsch]
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
RewriteRule .* - [E=MAGE_RUN_CODE:%1]

Apache è nervosa con le variabili d'ambiente e sottocartelle, come dimostrato da questo eccellente SO risposta . Le prime due righe producono $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch'; mentre le ultime due righe forniscono la necessaria $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Ci sono numerosi altri trucchi, ma quanto sopra mi ha morso prima.

L'obiettivo finale dovrebbe essere di rilevazione iniziale, per quanto è ragionevole (GeoIP + preoccupazioni multi-lingua) mentre ottenere all'utente di impostare il cookie negozio che può essere utilizzato per bypass / passo attraverso la logica le richieste successive.

Altri suggerimenti

Se gli URL rientrate (sottocartelle) possono avere lo stesso nome come i codici negozio (perché no?) Configuration > Web > Url options > Add Store Code to Urls, si può semplicemente attivato.

abbiamo finito per fare esattamente questo

Abbiamo verificato con il supporto Enterprise che il modo migliore per farlo è attraverso la creazione di sottocartelle.

Abbiamo finito per fare in questo modo:

  • Creare una directory "languagefolders"
  • Creato una copia della index.php all'interno della directory insieme ad un .htaccess e collegamenti simbolici adeguati alle cartelle Magento (app /, errori /, ...)
  • link simbolici creati "de", "en", ecc all'interno della directory principale Magento che punta ai "languagefolders" directory

In questo modo siamo in grado di aggiungere una nuova lingua attraverso la creazione di un nuovo collegamento simbolico (per esempio "Fr").

Nel backend abbiamo impostato il negozio base url a domain.com/en

Se si utilizza nginx un aggiornamento è necessario al trattamento posizione per elaborare index.php anche nella nuova sottocartella. Questo deve essere fatto per ogni nuova cartella traduzione

C'è un voce nel sapere ufficiale Magento base che descrive esattamente questo.

Nel caso in cui si sta lavorando con Apache, assicurarsi che tutte le voci host virtuali (per ogni dominio) puntano alla stessa radice documento in cui le tue bugie installazione di Magento. Questo è per più domini.

Il passo successivo (e ultimo) è il nella stessa cartella .htaccess Magento installazione. .htaccess è un potente file di configurazione a livello di directory in cui è possibile impostare le regole-azioni per ogni richiesta del server. Quindi sarà necessario per gestire tutti i diversi (sotto) domini / cartelle azioni là e impostare le variabili del server corretti che usi Magento in inizializzazione palco.

Dopo aver finito con la configurazione del server, si dovrà impostare i percorsi di base diversi per ogni del negozio di Magento di amministrazione (sistema - Configurazione - generale - web).

Quindi assicuratevi di seguire la guida ufficiale (che è anche il modo migliore) e le cose dovrebbero funzionare senza problemi.

Per prima cosa devi fare un po 'di configurazione nel pannello di amministrazione di Magento, quindi creare una sottodirectory, e spostare l'index.php e il .htaccess nella sottodirectory, e apportare alcune modifiche minori al index.php.

qui è un esempio completo di come fare questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top