L’ensemble des champs de configuration disponibles depuis l’interface admin de Magento 2 peuvent également se piloter depuis le fichier app/etc/config.php
. Cette fonctionnalité peut se révéler très utile pour embarquer sous Git des pré-configurations de projet.
Documentation officielle: Magento 2 DevDocs – config.php reference.
ATTENTION CAVEAT!: la pré-configuration de votre/vos sites via ce fichier config.php
va désactiver les champs correspondants dans l’interface d’administration. Ceci veut dire que vous ne pourrez plus modifier les paramètres en question via le backoffice. Il faudra impérativement intervenir sur le fichier config.php
à cet effet. Magento 2 propose un moyen de pré-configurer vos sites tout en laissant l’admin libre de faire des modifications après coup via le backoffice, mais la config n’est alors pas scriptée. Les changements s’opèrent directement en base de données. Pas pratique!
Pas de panique, il existe une solution pour Pré-configurer vos sites Magento 2 de manière scriptée tout en laissant l’admin libre de faire des modifications après coup via le backoffice.
Obtenir un fichier config.php de référence
Source: Export the configuration.
Un fichier config.php
de référence vous permettra d’avoir sous les yeux la majeure partie des paramètres présents en admin. ATTENTION: il est conseillé de faire une copie de sauvegarde de votre fichier config.php initial car il sera écrasé par la commande ci-dessous! Exécuter la commande:
1 |
$ bin/magento app:config:dump |
Vous pouvez ensuite renommer le fichier généré en config.default.php
et y revenir ultérieurement pour consultation.
Pré-configurer vos sites Magento 2 de manière scriptée tout en laissant l’admin libre de faire des modifications après coup via le backoffice
Testé fonctionnel Magento 2.3.4!
Magento 2 prévoit une commande, agrémentée de quelques paramètres. Doc officielle: Magento 2 DevDocs – Set configuration values:
bin/magento config:set [–scope= »… »] [–scope-code= »… »] [-le | –lock-env] [-lc | –lock-config] path value
Cette commande consigne les directives de configuration en base de données, mais pour des raisons évidentes de portabilité il est tout-à-fait possible de l’exécuter depuis un script bash qui, lui, se révèle plus pratique à l’utilisation (versioning sous Git, déploiement des sites sans dump/restore
de la base de donnés, …).
[A lire] Technique à appliquer en connaissance de cause!
Cette méthode n’est pas une méthode miracle et il convient de bien comprendre à quoi elle sert avant de la mettre en oeuvre. Vous allez, au premier déploiement de votre instance Magento 2, pouvoir paramétrer l’apparence graphique de votre site à l’aide d’un script plutôt qu’en faisant tout un tas de manipulations en backoffice. Ce script devra n’être lancé qu’une seule fois, au déploiement de votre/vos site(s). Ensuite, ce(s) dernier(s) vont vivre et le(s) admin(s) vont procéder à des modifications via le backoffice. Si vous relancez votre script après que des modifications aient été effectuées en backoffice sur des champs qui sont paramétrés dans ce premier, vous perdrez tout le bénéfice de ces dernières!
Il est important de bien comprendre que ce type de script permet juste de gagner du temps lors d’un premier déploiement ou en phase de développement lorsque plusieurs développeurs s’échangent du code.
Création d’un fichier init-theme.sh
à la racine de votre projet Magento 2:
Cette directive empêche l’ouverture automatique d’une popup d’inscription à la newsletter (fonctionnalité qui vient avec de nombreux thèmes payants) à chaque ouverture de page:
1 2 3 4 5 |
#!/bin/bash bin/magento config:set --scope=websites --scope-code=base themecore/advanced/newsletter_group/show_newsletter_popup 0 bin/magento setup:upgrade |
Décryptage: mise en regard de la même directive dans un fichier config.php
, la directive ci-dessus prend tout son sens.
1 2 3 4 5 6 7 8 9 10 |
'scopes' => [ 'websites' => [ // --scope=websites 'base' => [ // --scope-code=base [..] 'system' => [ 'default' => [ 'themecore' => [ 'advanced' => [ 'newsletter_group' => [ 'show_newsletter_popup' => '0', // themecore/advanced/newsletter_group/show_newsletter_popup<ESPACE>0 |
Une méthode possible consiste ainsi à générer un fichier config.php
de référence après avoir mis en place votre configuration via l’interface d’admin, puis à créer un script bash en regard de ce dernier.
Le fichier config.php
auto-généré peut contenir beaucoup d’informations. Pour trouver rapidement celle qui vous intéresse, vous pouvez passer votre backoffice en anglais et regarder le libellé du champ qui vous intéresse. Dans notre exemple, il s’agit de « Show Newsletter Popup » qui se traduit par show_newsletter_popup
dans le fichier config.php
.
Il est à noter que certains champs sont accompagnés d’une coche/checkbox sur laquelle vous ne pourrez pas avoir la main via votre script.
Jouer votre script:
Tout d’abord, passer le script en exécutable:
1 |
$ chmod +x init-theme.sh |
…puis le jouer:
1 |
$ ./init-theme.sh |
REMARQUE TRES IMPORTANTE: avant de voir les effets du script en front, il faudra impérativement vous connecter à l’interface d’admin et vous rendre dans Stores > Configuration [Settings] et activer à la main le bouton « Save Config ».
Les scopes pour une boutique simple (un seul ‘Store View’):
Modifie la valeur pour ‘Default Website’ et surcharge la valeur de ‘Default Config’:
1 2 3 4 5 |
bin/magento config:set --scope=websites --scope-code=base path value # Front: [x] (uniquement si la valeur de 'Default Store View' n'a pas déjà été modifiée) # Default Config: [ ] # Main Website: [x] # Default Store View: [ ] |
Modifie la valeur pour ‘Default Store View’ et surcharge les valeurs de ‘Main Website’ et de ‘Default Config’:
1 2 3 4 5 |
bin/magento config:set --scope=stores --scope-code=default path value # Front: [x] # Default Config: [ ] # Main Website: [ ] # Default Store View: [x] |