Question

Un client veut sa boutique de MultiStore à mettre en place comme ceci:

Ceci est un exemple, mais il peut y avoir beaucoup plus de différents sous-dossiers. Quelle est la meilleure approche pour gérer les différents sous-dossiers pour différentes vues magasin / sites?

Je sais qu'une solution est de créer des sous-dossiers appelés de, etc. en et copier le index.php et .htaccess dans les sous-dossiers correspondants.

Il peut aussi y avoir des solutions de contournement (liens symboliques pour index.php, la configuration vHost au lieu d'utiliser htaccess) afin de minimiser la duplication de fichiers, mais je voudrais trouver une solution où je ne dois pas faire des modifications dans le fichier système mais juste tout poignée par configuration.


UPDATE

Nous avons vérifié avec le soutien des entreprises que la meilleure façon de le faire est de créer des sous-dossiers.

Nous avons fini par le faire comme ceci:

  • Créer un répertoire "languagefolders"
  • Création d'une copie de index.php dans le répertoire avec un .htaccess ajusté et liens symboliques aux dossiers Magento (app / erreurs / ...)
  • créé des liens symboliques "de", répertoire "en" etc., dans le pointage de répertoire racine Magento aux "languagefolders"

De cette façon, nous pouvons ajouter une nouvelle langue en créant un nouveau lien symbolique (par exemple « fr »).

Était-ce utile?

La solution

Il est très facile de servir plusieurs domaines / chemins basés sur les URL. Comme mentionné précédemment, est possible lorsque les codes de core/store uniques peuvent être utilisés dans le chemin que la configuration la plus simple des sous-dossiers (configuration uniquement) . Cela nécessite une des options suivantes:

  1. Les visiteurs sont liés au chemin de sous-dossier correct initialement
  2. Les visiteurs sont servis une page de destination dont ils choisissent leur magasin et de recevoir un cookie
  3. Un mécanisme est utilisé pour définir le type d'exécution et le code d'exécution avant la manipulation de la réponse PHP

En ce qui concerne # 3: depuis la version 1.4 Magento, a permis de permettre au serveur Web pour déterminer le contexte en cours d'exécution ( site ou magasin ), ainsi que le code particulier qui Devrait être utilisé. De 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);

Alors que les variables d'environnement sont utilisées pour initialiser l'application, il est possible d'influer sur le système avant PHP même tourner vers le haut. Avec Apache et mod_rewrite cela peut être fait pour les sous-dossiers avec un peu de ruse:

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

Apache est twitchy avec des variables d'environnement et les sous-dossiers, comme l'a démontré par cette excellente réponse SO . Les deux premières lignes donnent lieu à $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch'; alors que les deux dernières lignes fournissent la $_SERVER["MAGE_RUN_CODE"] = 'deutsch'; nécessaire. Il existe de nombreux autres trucs, mais m'a mordu ci-dessus avant.

L'objectif final devrait être la détection initiale autant que raisonnable (geoip + préoccupations en plusieurs langues) tout en obtenant l'utilisateur de définir le cookie de stockage qui peut être utilisé pour contourner / pas dans la logique les demandes ultérieures.

Autres conseils

Si les URL (en retrait) sous-dossiers peuvent avoir le même nom comme les codes de magasin (pourquoi pas?), Vous pouvez simplement permis Configuration > Web > Url options > Add Store Code to Urls.

nous avons fini par faire exactement que

Nous avons vérifié avec le soutien des entreprises que la meilleure façon de le faire est de créer des sous-dossiers.

  

Nous avons fini par le faire comme ceci:

     
      
  • Créer un répertoire "languagefolders"
  •   
  • Création d'une copie de index.php dans le répertoire avec un .htaccess ajusté et liens symboliques aux dossiers Magento (app /, erreurs /,   ...)
  •   
  • créé des liens symboliques "de", répertoire "en" etc., dans le pointage de répertoire racine Magento aux "languagefolders"
  •   
     

De cette façon, nous pouvons ajouter une nouvelle langue en créant un nouveau lien symbolique (par exemple   "Fr").

Dans le backend nous avons mis la boutique base url à domain.com/en

Si vous utilisez nginx une mise à jour est nécessaire pour le traitement de votre emplacement pour traiter index.php également dans le nouveau sous-dossier. Cela doit se faire pour chaque nouveau dossier de traduction

Il y a une entrée dans la connaissance officielle Magento la base qui décrit exactement cela.

Dans le cas où vous travaillez avec Apache, assurez-vous que toutes les entrées de l'hôte virtuel (pour chaque domaine) pointent vers la même racine du document où se trouve votre installation de Magento. C'est pour plusieurs domaines.

La prochaine (et dernière) chose est le .htaccess dans le même dossier d'installation Magento. .htaccess est un fichier de configuration au niveau du répertoire puissant où vous pouvez définir des règles-actions par chaque requête de serveur. Vous aurez donc besoin de gérer tous les différents domaines (sous) / actions des dossiers là-bas et définir les variables de serveur correctes que les utilisations Magento au stade de l'initialisation.

Une fois que vous avez terminé avec la configuration du serveur, vous devrez définir différents chemins de base pour chacun des magasins dans l'admin Magento (système - configuration - général - web).

Donc, assurez-vous que vous suivez le guide officiel (qui est aussi le moyen privilégié) et les choses devraient fonctionner en douceur.

D'abord, vous devez faire une configuration dans le panneau d'administration Magento, puis créez un sous-répertoire, et déplacer le index.php et le .htaccess au sous-répertoire, et apporter quelques modifications mineures au index.php.

est un exemple complet de la façon de le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top