Testé fonctionnel Magento 2.3.x.

Un fichier layout/customer_account.xml devrait être présent dans chaque module proposant des fonctionnalités pour le compte client. Si ce n’est pas le cas, voir ici Pas de layout customer_account.xml dans votre module? Créez-en un!.

Mauvaises pratiques liées à l’utilisation des layouts customer_account.xml

ATTENTION: sachant que la surcharge d’un layout customer_account.xml dans votre thème ne peut se faire que dans un module donné, les blocs impactés doivent impérativement être invoqués à l’aide de la balise referenceBlock et NON PAS recréés à l’aide de la balise block.

  1. Ne pas centraliser toutes les entrées (émanant de différents modules) dans un layout unique customer_account.xml alors qu’il faudrait surcharger autant de fichiers customer_account.xml que nécessaires dans votre thème. On perd ainsi en modularité.
  2. Ne pas recréer un block pour chaque entrée de menu (même pour ceux qui existent déjà et sont déclarés dans leurs modules respectifs) au lieu de faire une référence au bloc existant via <referenceBlock>. Ceci a pour effet d’alourdir le code et les performances puisqu’au lieu d’utiliser le bloc précédemment déclaré, on en créer un second qui a la même utilité. Pire, si le bloc référencé initialement dans le module est désactivé, l’entrée de menu apparaîtra toujours dans le compte client puisqu’un second bloc a pris les commandes.

Code de base pour un layout customer_account.xml

Pour toutes les entrées qui devront s’intégrer dans le menu de navigation du compte client:

Les entrées qui composent le menu

Mon compte, informations du compte et carnet d’adresses (et « se déconnecter »)

  • Fichier parent: vendor/magento/magento-customer/view/frontend/layout/customer_account.xml
  • Surcharge: app/code/design/frontend/MyVendor/mytheme/Magento_Customer/layout/customer_account.xml

Ici, « se déconnecter » est un bloc qui n’a pas encore fait l’objet d’une initialisation dans un layout customer_account.xml enfant. Nous utilisons donc block au lieu de referenceBlock pour signifier son initialisation.

Pour les trois autres entrées, elles sont déjà présentes dans le layout vendor/magento/magento-customer/view/frontend/layout/customer_account.xml que nous surchargeons. Nous utilisons donc referenceBlock pour signifier qu’on surcharge des valeurs précédemment déclarées dans un layout parent.

Abonnements aux lettres d’information

  • Fichier parent: vendor/magento/magento-newsletter/view/frontend/layout/customer_account.xml
  • Surcharge: app/code/design/frontend/MyVendor/mytheme/Magento_Newsletter/layout/customer_account.xml

Cette entrée fait référence à une fonctionnalité hors module customer puisqu’elle est apportée par le module newsletter. Il est de ce fait conseillé, pour d’avantage de modularité, de la surcharger dans un layout customer_account.xml propre au module Newsletter.

Faites ensuite de-même pour toutes les entrées relatives à d’autres modules.

Supprimer/Masquer des entrées précédemment référencées

Ces entrées s’affichent dans votre menu et vous souhaiter les masquer.

Pas de layout customer_account.xml dans votre module? Créez-en un! (Amasty Gdpr)

Dans certains cas, une entrée est présente dans le menu en sidebar du compte client, mais elle n’est pas ajoutée via un layout customer_account.xml. Nous avons mis le doigt sur unemùauvaise pratique, mais comment retrouver les informations qui nous permettront de créer nous-même ce fichier?

Dans notre IDE, faire une recherche sur customer_account_navigation (qui constitue le referenceBlock principal du menu du compte client dans customer_account.xml, celui qui concentre toutes les entrées) nous a permis de trouver le block PHP app/vendor/amasty/module-gdpr/Block/AccountLinkPlugin.php.

Nous avons dans le code de ce block de quoi renseigner les <argument name="path" et <argument name="label":

On voit que 'sortOrder' => self::SORT_ORDER fait référence à une variable. Elle est disponible dans le même fichier, plus haut:

Les informations INSERT_AFTER, LINK_BLOCK_NAME et LINK_BLOCK_ALIAS peuvent tout à fait être exploitées dans la création du template customer_account.xml dont je fournis un modèle juste en-dessous:

app/design/frontend/MyVendor/mytheme/Amasty_Gdpr/layout/customer_account.xml:

Supprimer l’entrée Amasty Gdpr du menu du compte client

Encore un cas un peu particulier, car la chose n’est pas faisable depuis un layout XML en référençant un block existant et en lui mettant l’attribut remove="true". Il va falloir désactiver le plugin!

Dans le fichier vendore/amasty/module-gdpr/etc/frontend/di.xml, repérer les deux blocs de code suivants:

Il faudra soit créer un module spé, soit rajouter ces deux blocs de code (en ajoutant pour chacun le paramètre disabled="true") dans un module spé déjà existant. Dans mon exemple, je choisis la deuxième solution.

Dans app/code/MyVendor/mymodulespé/etc/frontend/ je crée un fichier di.xml dans lequel je colle ceci:

Ajouter des liens spécifiques/custom (vers un pages CMS par exemple)

Attention: pour des blocs qui ne sont pas déjà déclarés ailleurs ou des pages CMS.


Ancienne version du billet

ATTENTION: ne pas utiliser cette méthode qui comporte deux soucis majeurs liés aux mauvaises pratiques dépeintes plus haut.

Ressources en ligne:

Localiser tous les ajouts d’entrées dans le menu de navigation du compte client de Magento 2 (liées à des fonctionnalités du core ou à des modules/plugins/fonctionnalités spécifiques)

Les diverses entrées du menu de navigation du compte client dans Magento 2 se gèrent via des fichiers de layout customer_account.xml présents dans chacun des modules dont les fonctionnalités respectives doivent être accessibles depuis le-dit menu.

Faire une recherche sur les fichiers nommés customer_account.xml permet de trouver toutes les entrées incluses dans le menu de navigation du compte (sidebar). Pour rajouter une entrée supplémentaire liée à une fonctionnalité/un module, il faut créer un fichier customer_account.xml dans le module concerné et faire, par exemple, comme pour (module du core) vendor/magento/module-downloadable/view/frontend/layout/customer_account.xml.

Supprimer des entrées ou en ajouter des nouvelles

Créer un fichier customer_account.xml dans app/design/frontend/MyVendor/mytheme/Magento_Customer/layout:

Liste des blocs les plus communs:

Supprimer les principales entrées du menu de navigation du compte client de Magento 2 (liées à des fonctionnalités du core de l’édition CE)