Tagurl

[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.

[RBS Change 3.6.x] Détecter un choix utilisateur via l’élément HTML Select/Option avec jQuery

Cas du bloc Switchlanguage dans Change 3.6.x

Objectif: au choix de la langue via l’élément <select />, on redirige vers la page traduite.

Côté template, on boucle sur les langues disponibles. On stocke l’URL de la page de destination via l’attribut value de l’élément option.

En jQuery, on détecte un choix d’option via l’élément HTML <select />, on récupère la valeur de l’attribut value (l’URL de la page de destination) et on lance la redirection.

[SASS] Intégrer une variable dans une URL

Avec gulp-sass

Nous donnera: @import url("/themes/lorem/style/bootstrap.min.css");.

Avec gulp-ruby-sass

Attention:

Nous donnera: @import url("/themes/lorem/style/bootstrap.min.css");.

[Magento] Récupérer l’URL du skin dans un bloc statique

Pour charger une image consignée dans /skin/frontend/default/_nom_de_mon_skin_/images/ dans un bloc statique :

Même chose depuis un fichier template (phtml) :

[Magento] Remplacement d’une base de données et modification de l’URL d’un site

Note : L’ensemble des commandes SSH de ce tuto sont à taper à la racine de votre projet.

Avec magerun (méthode la plus efficace)

Supprimer la BDD existante, en recréer une vide, importer la nouvelle BDD :

Sans magerun

Si la nouvelle base de données est fournie sous forme d’archive *tar.gz

Décompresser l’archive à la racine de votre projet :

  • avec n’importe quel utilitaire de type Winzip, Winrar, 7zip…
  • …ou décompresser l’archive en tapant la ligne de commande suivante :

Si la nouvelle base de données est fournie sous forme d’archive *.gz

Notez bien le nom du fichier ma_nouvelle_base_de_données.sql que vous venez de décompresser. Vous en aurez besoin dans un instant…

Remplir les tables avec la nouvelle base fraîchement copiée

Pour modifier (où simplement obtenir) les username, password et dbname de votre base de données taper la commande :

Les informations dont vous aurez besoin sont renseignées entre les balises suivantes :

Notez que ce fichier doit également contenir l’URL local de votre site :

Commande SSH à exécuter pour déployer la base :

Attention, lorsque mysql est dockerisé, rajouter un paramètre -h db. La commande suivante sue joue à l’intérieur du conteneur !

Lancer, toujours ds le Docker, le script configurator, qui permet de setter la config (notamment de mettre à jour les URLs) projet :

Exemple :

Attention : -p et le mot de passe doivent être collés !!

Remarque : il reste possible que la commande fonctionne sans qu’on ait besoin de renseigner le mot de passe.

Changer les URLs de la nouvelle base que vous venez d’importer dans votre projet par vos URLs locales

Se connecter à un PhpMyAdmin qui permet d’administrer les tables du projet Magento

Méthode 1:

magento-modifier_URL_bdd

Si le site possède plusieurs Store Views (multilangue) :

Sous phpMyAdmin, dans le champ textarea de l’onglet SQL, taper :

Que faire dans le cas où le contenu des pages s’affiche dans le navigateur mais que les ressources CSS et JS ne sont pas chargées ?

Dans cet ordre :

  1. Afficher la source dans le navigateur (ctrl + u) et vérifier que la racine des URLs vers lesquelles pointent vos ressources CSS et JS est similaire à l’URL du site.
    Dans l’exemple ci-dessous, ce n’est pas le cas :

    magento_bdd-url_error

    Si la racine des URLs vers lesquelles pointent vos ressources CSS et JS est différente de l’URL du site :

    Rendez-vous en base de données et dans la table core_config_data effectuer une recherche (onglet Rechercher) dans la colonne value avec comme opérateur LIKE %…% et comme valeur le libellé de la racine de votre URL (dans notre exemple : media.xxx.com).

    magento_bdd-bad_url_search

    Vous devriez vous retrouver avec les résultats suivants (les URLs dans la dernière colonne de la capture sont déjà modifiées :

    magento_bdd-edit_url

    Editez les URLs dans la dernière colonne comme suit :
    Pour base_xxx_url dans l’avant-dernière colonne, mettrez <url_de_la_racine_de_mon_site>/xxx/ dans la dernière colonne.

  2. Vérifier en backoffice que les caches sont désactivés. System > Cache Management. Attention : j’ai eu un cas où les caches étaient, à priori, désactivés mais lorsque j’ai cliqué sur le bouton « Flush Magento Cache » (1er bouton en haut à droite, au-dessus du tableau) tout est repassé en ENABLED !
    En ligne de commande, on peut supprimer les caches de la manière suivante :

  3. Eventuellement, jouer sur la compression des ressources CSS et JS.
    System > Configuration > (Sidebar) encart ADVANCED > entrée Developer > volets « Merge JavaScript Files » et « Merge CSS Files » à No.

Méthode 2:

Sélectionner la table core_config_data relative à la base de données de votre projet.

Trouver un mot-clé présent dans toutes les URLs qu’on souhaite changer et effectuer une recherche à partir de celui-ci (cf. illustration ci-dessous avec le mot-clé ‘netapsys’) :

  • Onglet Rechercher
  • Dans le tableau, dernière rangée ‘value’ sélectionner l’opérateur LIKE %…%
  • Mettre votre mot-clé dans la colonne ‘Valeur’

01

…puis éditer les URLs souhaitées parmi celles qui s’affichent dans la liste des résultats de recherche.

Se connecter au backoffice du projet Magento.

  • Catalogue > Gérer les produits
  • Sélectionner tous les éléments de la colonne ‘Nom’ qui n’ont pas d’URL de spécifié dans la colonne ‘Sites web’
  • En haut à droite du tableau, champ ‘actions’ choisir ‘Mettre à jour les attributs’

02

  • Dans la colonne de gauche ‘Informations produits’ sélectionner l’entrée ‘Sites web’
  • Cocher la case qui correspond au site qui vous intéresse dans le groupe de champs ‘Modifier les attributs > Ajouter le produit aux sites web’
  • Cliquer sur sauvegarder

03

[RBS Cooking] Mettre à jour les URLs Git de vos projets

Procédure à mettre en oeuvre pour RBS Cooking et le dossier /projects pour chaque projet Change en local.

Manipulations à n’effectuer qu’une seule fois pour tous vos projets

Changer l’origin de /rbscooking

Dans /home/intlangf/rbscooking :

(Vous trouverez cette URL dans le dossier netapsys.rbs-change/interne.projects sur https://gitlab.netapsys.fr/)

Changer l’origin de /projects

Dans home/intlangf/projects (le repository qui détient tous les settings de tous les projets – à ne faire qu’une fois, donc…) :

(Vous trouverez cette URL dans le dossier netapsys.rbs-change/interne.projects sur https://gitlab.netapsys.fr/)

Manipulations à répéter pour chacun de vos projets

Rebrancher votre repository local vers le nouveau repository distant (https://gitlab.netapsys.fr)

Dans le dossier local qui contient votre projet (exemple : /home/intlangf/change30/accastillage) :

Vérifier l’intégrité des URLs dans le change.xml de votre projet

Pour les modules versionnés sous GIT

Remplacer :

par le nouvel URL que vous trouverez dans le dossier netapsys/rbs-change/ sur le repository distant https://gitlab.netapsys.fr/ :

/!\ SUPPRIMER VOTRE LOGIN de l’URL :

Pour les modules versionnés sous SVN

Remplacer :

par le nouvel URL se présentant sous la forme https://svn.netapsys.fr/webedit4/wfrepo/modules//branches/ :

/!\ Pour l’ensemble des modules versionnés sous SVN, rajouter un attribut vcs= »svn »

  • ch compile-config
  • git status
  • git add change.xml
  • git commit -m « « 
  • git push origin master

Changer les settings par défaut du projet

Opération à effectuer obligatoirement

Ouvrir le fichier defaults.py relatif à votre projet dans un éditeur :

et remplacer :

par le nouvel URL du projet que vous trouverez sur le repository distant https://gitlab.netapsys.fr/ :

/!\ SUPPRIMER VOTRE LOGIN DE L’URL

Commiter les modifs :

  • git pull
  • git status
  • git add
  • git commit -m
  • git push

Opération facultative

L’opération suivante est facultative. Elle vous servira éventuellement pour d’anciens projets si votre mise en intégration/production bloque sur les modules concernés, mais c’est normalement dans le change.xml (voir https://wiki.netapsys.fr/grand-est/web/interne/rbscooking/start/update_git_urls#verifier_l_integrite_des_urls_dans_le_changexml_de_votre_projet) que ces informations doivent être consignées et seront prises en compte par cook.

Pour info :

  • la mise en intégration du projet Accastillage qui sert d’exemple dans cette doc est passée alors que j’ai supprimé les lignes ci-dessous du fichier defaults.py.
  • pour visualiser un sample des infos que doit contenir un fichier defaults.py, allez dans default/sample/settings/.

ATTENTION : les URLs dans les deux bouts de code ci-dessous ne sont pas forcément justes. Les vérifier depuis votre navigateur.

AVANT :

APRES :

Commiter les modifs :

  • git pull
  • git status
  • git add + fichier settings.py modifié
  • git commit -m
  • git push

Mise en intégration

Les URLs d’intégration de vos projets ont changé également.

Dans projects//settings ouvrir int.py.

Remplacer l’URL sous « hostname » : « «  par l’adresse IP du site en intégration.
(pour obtenir l’IP d’un site à partir de son URL, taper « dig « ).

Pour accastillage :

© 2020 devfrontend.info

Theme by Anders NorénUp ↑