• Développement
  • E-Commerce
  • Magento

La gestion du multisite sur Magento 2

emilie_92999d477c
Emilie Wittmann, Technical Lead
Le 4 avril 2019
multiwebsite_f76a199478
  • ecommerce
  • catalogues produits

Lecture :5 minutes

L’un des nombreux avantages de Magento est la gestion native du multisite. On peut facilement créer de nombreux websites dans la même instance de Magento et imaginer une infinité de cas différents.

On peut par exemple avoir besoin d’un nouveau store sur Magento pour pouvoir gérer un nouveau dépôt physique avec des produits et des stocks différents. Plusieurs storeviews permettent de faire des sites multilingues ou multidevises. On peut également avoir des catalogues de produits différents et les associer aux stores. 
 

 

 

 

Les entités :

  • Global : représente l’instance complète de Magento.
  • Un website : un website peut avoir ses propres clients et ses propres commandes, ainsi que des prix différents par produit. Il peut également avoir des paiements spécifiques ou des méthodes de livraison différentes des autres websites.
  • Un store : un website peut avoir plusieurs stores avec des menus différents et une apparence différente. Les stores peuvent avoir des urls différentes. Enfin, ils peuvent également avoir un catalogue différent.
  • Une storeview : cette entité est en général utilisée pour configurer les différentes langues et différentes devises.

multiwebsite in Magento

Quelques exemples

Il est possible d’imaginer des scénarios différents et répondant à des besoins variés. Voilà quelques exemples d’utilisations différentes du multisite sur des sites développés sur Magento 1 ou 2.

  • Banana Moon est un site de vente en ligne de maillots de bain utilisant Magento. Le mode multisite est utilisé sur ce site pour gérer plusieurs dépôts physiques. Il peut gérer grâce aux différents websites les différents dépôts en Europe mais aussi aux États-Unis. Il peut gérer un catalogue différent et une liste de clients différente. Chaque website possède également plusieurs storeviews pour pouvoir proposer plusieurs langues aux clients.

 

  • Gallaud Joaillier est un site de vente en ligne de bijoux personnalisés inspirés par l’équitation sur lequel on retrouve également plusieurs websites. Un website permet de gérer un catalogue en francs suisses et l'autre gère le catalogue en Euros. Chacun des websites est également composé de plusieurs storeviews pour pouvoir proposer une traduction anglaise et française.

 

  • La boutique en ligne cache-coeur lingerie est un bon exemple de multisite. Spécialisé dans la vente en ligne de sous vêtements maternité et de coussinets d’allaitement, il propose plusieurs websites avec des thèmes et urls différentes : www.curvematernity.com et www.cachecoeurlingerie.com. Cette configuration permet d’avoir un catalogue différent mais aussi un carnet de clients et de commandes différentes.

 

  • Le store Blackbird ! Notre propre site de vente en ligne d’extensions Magento est également composé de plusieurs websites. Nous pouvons ainsi mettre en avant une de nos extensions Advanced Content Manager avec une url spécifique : www.advancedcontentmanager.com. Les autres extensions sont vendues sur notre store : store.bird.eu. Pour chaque website nous utilisons des stores views différentes pour proposer le site en anglais et en français. Un website supplémentaire est également en place afin de proposer un catalogue en US Dollars.

 Cas concret sur Magento 2 : la création de différents websites et storeviews 

Dans le backoffice, allez dans la partie Stores>Settings>All Stores.

backoffice Magento - menu

 

On peut créer deux websites un website B2B pour pouvoir proposer un catalogue aux professionnels et un website B2C pour la vente directe au particulier. Le website B2B aura par exemple une url différente.
On peut ensuite créer pour chaque website deux storeviews pour pouvoir proposer deux langues : le français et l’anglais.

Exemple de config B2B / B2C

 

Configurations spécifiques

Configurer un thème différent et une url différente pour chaque website.

config template

 

Configurer une langue différente et une monnaie différente par storeview.

currencies setup

 

 

Routage apache de base :

 

<VirtualHost *:80> ServerName bird.local.com ServerAlias b2b.bird.local.com <Directory /home/web/bird/htdocs/pub> Options FollowSymLinks Multiviews Indexes AllowOverride All Require all granted </Directory> SetEnvIf Host .*b2b.* MAGE_RUN_CODE=b2b_en SetEnvIf Host .*b2b.* MAGE_RUN_TYPE=store </VirtualHost>

 

Routage plus complexe avec choix de langue

Configuration du store selon request_uri dans le fichier pub/index.php :

if( strpos($_SERVER['REQUEST_URI'], "b2b.") !== false ){
$store = 'b2b';
}else{
$store = 'b2c';
}
if( strpos($_SERVER['REQUEST_URI'], "/fr/") !== false ){
$lang = 'en';
}else{
$lang = 'fr';
} $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = $store.’_’.$lang;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);

 

Configuration magento pour les stores :
même base_url par store
config spécifique pour base_link_url

 

Pour aller plus loin : Changement de store selon geoip ou cookies

Changement de website selon les cookies de façon transparente pour le client sur un même et unique domaine.

if ( !empty($_COOKIE[‘b2b’]) && _COOKIE[‘b2b’] === ‘true’ ) {
$store = 'b2b';
} else {
$store = 'b2c';
} $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = $store;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);

Changement de storeview selon la localisation géographique du client pour lui afficher la bonne langue par défaut.


$record = geoip_record_by_name( $_SERVER['REMOTE_ADDR']); if( strpos($_SERVER['REQUEST_URI'], "/b2b/") !== false ){
$store = 'b2b';
}else{
$store = 'b2c';
} if($record->country_name === ‘FR’){
$lang = ‘fr’;
}else{
$lang = ‘en’;
}
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = $store.’_’.$lang;
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'store'; $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);

 

 

Nos articles

Découvrir aussi

Abonnez-vous au blog pour ne rien louper