Étiquette : store view

[Magento 2] Des Websites ou des Stores multiples avec Docker et nginx

Source: Magento 2 dev docs (official) – Multiple websites or stores.

Consider the following terms:

  • Website—is the top-level container for sites, shipping methods, payment methods, and more. To create completely separate sites that do not share cart, shipping methods, or other you must create separate websites.

    Website customer accounts can be shared between multiple websites within a single Magento instance. A website contains at least one store. Catalog prices should be managed at the website level.

  • Store—is contained by a website. In turn, a store contains at least one store view.

    Multiple stores can share cart, user sessions, payment gateways, and more, but they have separate catalog structures and Catalog price.

    Catalog Qty (inventory) can not be managed at the store level. Inventory is managed at Website or Global level only.

    Store views change the way pages are presented, and are typically used to display a store with different layouts or languages. You can manage different currencies per store view.

Cas pratique

Ressources officielles utilisées:

Structure du projet en Websites > Store (group) > Store view:

Structure du projet vu de l’admin (Stores > All stores [Settings]):

N’hésitez pas à agrandir l’image.

Attention: voir la documentation officielle pour savoir comment affecter les différentes URLs à chaque store view.

Fichier <racine_projet>/docker/.env en fonction de cette structure de sites:

ATTENTION: votre fichier .env ne se trouvera pas nécessairement dans un dossier docker/. Il se trouve au même niveau que le fichier docker-compose.yml.

Notes:

  • Pour l’ensemble des variables d’environnement MAGENTO_RUN_FR1_*, FR1 est un libellé libre qui vous permettra d’identifier votre website ou votre store view (j’y viens…).
  • Pour la variable d’environnement MAGENTO_RUN_*_TYPE, vous avez le choix entre website et store (cf. colonne 1 (website) et 3 (store view) dans l’admin: Stores > All stores [Settings]).
  • Pour la variable d’environnement MAGENTO_RUN_*_CODE, renseignez le code de votre website ou de votre store view (en fonction du choix fait précedemment).
  • Pour la variable d’environnement MAGENTO_RUN_*_URL, renseignez l’URL précisée dans les champs Base URL, Base Link URL, Secure Base URL, Secure Base Link URL, accessibles dans l’admin depuis Stores > Configuration [Settings] > Web [General] > puis sous « Store View » (juste sous le titre « Configuration », en haut à gauche) choisissez un scope.

Fichier <racine_projet>/app/etc/env.php en fonction de cette structure de sites:

Attention: les fichiers de configuration type config.php et env.php ne seront pris en compte qu’après avoir exécuté la commande bash $ magento app:config:import.

Fichier hosts (de Windows pour ma part)

Extrait fichier docker-compose.yml (image « web » uniquement):

Les lignes env_file: .env et VIRTUAL_HOST: "vitalconcept.${EXT:-local},vital-agriculture.${EXT:-local},vital-equideos.${EXT:-local},vital-paysage.${EXT:-local},vital-agriculture-be.${EXT:-local},test.vitalconcept.local" ont été ajoutées/modifiées par rapport à notre configuration originale.

Attention: il faut re-up le container Docker après chaque ajout de site/nouvelle URL:

magento.conf de nginx:

Se connecter en bash au docker « web » et vérifier que les URLs ont bien été écrites dans la configuration nginx en tapant la commande suivante:
$ cat /etc/nginx/sites-enabled/magento.conf

Assigner une root catégorie du catalogue à un store (à un sous-domaine/une URL)

Magento 2 User Guide: Root Categories > Step 3: Assign the Root Category to the Store.

[Magento] Concepts de base et terminologie

Websites and stores

Un website est une collection de stores qui elles-mêmes sont des collections de store views. L’articulation entre ces différentes entités se fait du général au particulier dans l’ordre suivant :

  1. Website
  2. Store
  3. Store view

Website

Un website est fait d’un ou plusieurs stores qui partagent les mêmes informations sur les clients, les commandes et le panier.

Stores

Le store est une collection de store views. Leur fonction principale est de fournir un container logique qui permet de regrouper les stores views correllées au sein d’un website.

Store views

Les instances de store (boutiques) dans Magento. La plupart des stores n’auront qu’une seule store view, mais la possibilité est laissée d’en affecter plusieurs (typiquement pour des projets multilingues).
Dans ce cas, vous pourriez créer un store unique et autant de store views que de langues voulues pour ce store.

Design packages and themes

  • Design packages
  • Themes

Design package

Une collection de thèmes en corrélation. Une instance de Magento peut en accueillir une multitude, mais un au moins doit être installé.
A l’installation, Magento est accompagné d’un package spécial nommé base. Un autre package sera également présent en fonction de l’édition de Magento que vous avez déployé :

  • Un package default dans l’édition CE
  • Un package pro dans l’édition PE
  • Un package enterprise dans l’édition EE

A ces packages de base peuvent s’ajouter vos propres packages (custom design packages).

Theme

Au sein d’un design package se trouvent les fichiers qui déterminent l’aspect graphique et les fonctionnalités front-end d’une boutique. Un thème Magento contient les éléments suivants :

  • Templating information : fichiers CSS, images, et fichiers JavaScript spécifiques au thème,
  • Skinning information : fichiers layout, fichiers template et locales spécifiques au thème.

Un thème donné ne peut appartenir qu’à un seul design package. Pas convention, chaque design package doit contenir un thème default. En plus de ça, un design package peut contenir une multitude de variations de ce thème default appellées non-default themes ou theme variant.

Structure d’un thème :

Fichiers de templating

Les fichiers de templating, qui définissent les contenus affichés dans les templates des différentes pages, se trouvent dans le répertoire app/design/frontend/<designPackageName>/<themeName>/ et sont organisés en sous-répertoires comme suit :

  • Layout

    Contient les fichiers XML qui définissent la structure des blocs dans les différentes pages, ainsi que les informations renseignées dans les balises meta et l’encodage de la page.

  • Template

    Contient les fichiers PTHML qui embarquent le markup HTML et le code PHP nécessaires à l’affichage de contenus bruts dans les pages.
    Il y a 2 types de templates : les templates de page et les templates de bloc.

  • Locale

    Contient des fichiers CSV, organisés par langue, qui embarquent des chaînes de translation pour l’ensemble des textes produits par Magento (éléments d’interface et messages, mais pas produits et catégories).

Fichiers d’habillage

Les fichiers d’habillage (skin), qui définissent l’habillage visuel des contenus, se trouvent dans le répertoire skin/frontend/<designPackageName>/<themeName>/ et sont organisés en sous-répertoires comme suit :

  • CSS

    Contient les feuilles de style.

  • Images

    Contient l’ensemble de simages utilisées par le thème.

  • JS

    Contient le code javaScript spécifique au thème. La plupart des librairies JavaScript embarquées nativement se trouvent dans un répertoire js à la racine du projet Magento.

Fallback hierarchy

Du particulier au général :

  1. Pour exécuter le rendu front, Magento cherche en premier lieu les fichiers dans package_name/theme_name/ (au plus profond de la hiérarchie des thèmes)
  2. Si il n’a rien trouvé, il remonte d’un cran dans la hiérarchie des thèmes (dans l’arborescence) et cherche les fichiers dans package_name/default/
  3. Si il n’a toujours rien trouvé, il remonte encore d’un cran dans la hiérarchie des thèmes et cherche les fichiers dans base/default/