Code de magasin dans l'URL pour chaque vue de magasin, sauf par défaut

10

J'ai activé système > Config > Web > Ajouter un code Store pour les URL et je configurer ai un nouveau magasin Voir pour le Canada (/ ca /).

J'aimerais idéalement que example.com/ca/ charge la vue du magasin du Canada, mais qu'il y ait toujours example.com (sans le defaultcode de magasin là-dedans) pour le magasin par défaut.

J'ai remarqué que la page d'accueil fonctionne très bien à cet égard, mais lorsque j'entre dans une page de produit, Magento inclut automatiquement le code du magasin dans l'URL.

La principale raison pour laquelle j'hésite à modifier nos URL actuelles pour notre magasin par défaut est simplement parce que je détesterais les voir perdre tout jus de lien. Je sais que théoriquement, tant que j'installe des redirections 301, ça devrait aller, mais je pense avoir lu quelque part qu'une petite quantité de jus est toujours perdue.

De plus, je pense que c'est probablement un peu mieux du point de vue de l'utilisabilité. Si la majeure partie de votre trafic est vers votre magasin par défaut et que vos clients sont habitués à l'URL régulière, pourquoi les déranger avec les informations supplémentaires /default/( /us/ou autre) de l'URL.

J'ai essayé de désactiver Ajouter un code de magasin aux URL et de simplement changer l'URL de base pour ma vue de magasin du Canada sur example.com/ca/, mais cela ne semble rien faire. Je suppose qu'il a besoin du paramètre activé afin de récupérer le code du magasin dans l'URL et de faire quoi que ce soit avec.

kalenjordan
la source

Réponses:

9

Je ne suis pas devenu heureux en utilisant Ajouter un code de magasin aux URL . La raison principale était que nous ne pouvions pas avoir plusieurs vues de magasin en utilisant la même langue (voir ma question ). En plus de cela, je n'aimais pas devoir utiliser un mauvais code de vue de magasin juste à cause de l'URL.

J'ai fait un petit test en utilisant la pointe fréquemment recommandée "créer un sous-dossier et créer des liens symboliques" et cela peut fonctionner. Veuillez vérifier si vous l'aimez.

  • Créer un sous-dossier / ca /
  • À l'intérieur du sous-dossier, créez des liens symboliques vers
    • ../app
    • ../les erreurs
    • ../comprend
    • ../index.php
    • ../js
    • ../lib
    • ../médias
    • ../peau
    • ../var
    • (ajoutez d'autres répertoires si vous le souhaitez / devez)
  • modifiez votre configuration vHost pour / ca / ​​(ou copiez .htaccess dans / ca / ​​et modifiez-la) dans

    • Définissez la base de réécriture:

      RewriteBase /ca/

    • Initialisez la vue de magasin correcte en fonction de l'URL. Il y a plusieurs façons de le faire, l'une peut être:

      RewriteCond %{REQUEST_URI} ^/ca/.* [NC,OR]
      RewriteCond %{REQUEST_URI} ^/ca$ [NC]
      RewriteRule .* - [E=MAGE_RUN_CODE:ca]
      RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
      RewriteRule .* - [E=MAGE_RUN_CODE:%1,E=MAGE_RUN_TYPE:store]`
      

Cela a fonctionné pour moi:

La création de dossiers et de liens symboliques n'est pas amusante, mais au moins vous n'avez pas à modifier les fichiers principaux.

Matthias Zeis
la source
2
Il vous suffit de créer des liens symboliques pour les médias, js et skin, puis de modifier le chemin d'accès à la classe Mage ../app/Mage.php. Pour autant que je sache, cela devrait suffire
Sander Mangel
2
Oui, si vous souhaitez éditer les fichiers core.
Matthias Zeis
@MatthiasZe est désolé d'avoir mis si longtemps à accepter! Parfois, je perds la trace des notifications SE et il est difficile de les marquer comme non lues. N'hésitez pas à me cingler sur Twitter à l'avenir si je prends une éternité pour marquer une réponse comme acceptée! Au moins avec twitter, vous pouvez mettre en favori un tweet afin de vous souvenir d'y revenir. Désolé et merci encore pour l'aide ici! Très bonne réponse!
kalenjordan
Pas de soucis! Je suis content d'avoir pu t'aider.
Matthias Zeis
2
Bon conseil! Deux possibles: 1 simplifications) Puisque vous créez des configurations de VHost séparées ou des fichiers .htaccess pour le sous - répertoire, vous pouvez initialiser le point de vue simple , sans conditions magasin: SetEnv MAGE_STORE_VIEW ca. RewriteBased'autre part n'est généralement pas nécessaire. 2) Il devrait suffire de définir des liens symboliques vers index.php et app, si vous ne définissez que l' URL du lien de base sur / ca / ​​et laissez la configuration d' URL de base par défaut
Fabian Schmengler
1

Sur la base de la réponse de Mzeis et du commentaire de Fschmengler , voici une manière KISS de le faire:

  1. Créez un sous-répertoire ca:mkdir ca
  2. Créez un lien symbolique vers le apprépertoire:ln -s ../app/ ca/app
  3. Créez un lien symbolique vers le index.phpfichier:ln -s ../index.php/ ca/index.php
  4. Créez un .htaccessfichier dans le carépertoire: touch ca/.htaccessavec le contenu suivant:

    SetEnv MAGE_RUN_CODE ca
    
    RewriteEngine On
    RewriteBase /en/
    
    # solves the issue that the environment variable MAGE_RUN_CODE is only available as REDIRECT_MAGE_RUN_CODE
    # see http://stackoverflow.com/a/10128290/719023 for details
    RewriteOptions inherit
    
  5. Sous System > Configuration > Web, réglez le Base Link URLà {{unsecure_base_url}}ca/et {{secure_base_url}}ca/respectivement.

Si, pour une raison quelconque, la RewriteOptions inheritpièce n'est pas possible pour vous, vous pouvez également simplement copier la pièce par défautmod_rewrite dans votre .htaccessfichier de sous-répertoire .

Cette solution devrait fonctionner aussi bien que celle de mzeis, mais elle est beaucoup plus petite et plus facile.

Simon
la source
0

une autre option consiste à utiliser un sous-domaine par magasin. Il vous suffit ensuite de configurer Apache pour indiquer à magento le "site Web / magasin" à utiliser.

De cette façon, vous pouvez avoir plusieurs "magasins" et "vues" sous les sites Web de sous-domaine dans le même intall magento.

  • les paramètres sont dans Système> Configuration> Général / Web
  • Pas sûr. URL de base
  • Sécurise . URL de base
  • Biscuit . Domaine

c'est la configuration Apache de la boutique example.com

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "default"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

c'est la configuration Apache du magasin "ca" supplémentaire

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName ca.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "ca"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>
Artistan
la source
0

Ajoutez simplement ceci à l'un de vos fichiers system.xml (dans app / code / module local):

<sections>
    <web>
        <groups>
            <url>
                <fields>
                    <use_store>
                        <show_in_store>1</show_in_store>
                    </use_store>
                </fields>
            </url>
        </groups>
    </web>
</sections>

De cette façon, vous pouvez choisir l'option "Ajouter un code de magasin aux URL" par vue de magasin.

nverhoye
la source
Vous pouvez le sélectionner. Mais êtes-vous sûr que cela fonctionne réellement?
Fabian Schmengler
Oui, testé sur magento 1.9.x et magento EE 1.13.x
nverhoye
Cela aurait été formidable si cela fonctionnait réellement, mais je n'ai pas pu faire fonctionner cela dans un environnement avec un site Web et plusieurs vues de magasin. Testé sur CE 1.9.2.3.
Aad Mathijssen
pas travaillé pour moi
Visakh B Sujathan