[Magento 2] Récupérer les données d’un client via son customer ID

Testé fonctionnel Magento 2.4! Source: How to get customer data by customer id in magento 2? (Version PDF – rakeshjesadiya.com-How to get customer data by customer id in magento 2).

ATTENTION: cet article ne traite pas de la manière de récupérer dynamiquement le customer ID. Il sera indispensable de le connaître afin que le code ci-dessous fonctionne correctement! Voici une manière rapide de récupérer le customer ID dans un template PHTML via l’Object Manager de Magento 2 (mais il s’agit d’une mauvaise pratique, alors servez-vous en uniquement pour tester le code ci-dessous; ensuite, faites ça proprement).

Liste des données client récupérées:

ATTENTION: bien que présent, le champ Prefix n’aura pas de valeur récupérée, même si vous avez activé la fonctionnalité d’affichage d’un champ « préfixe » (Madame, Monsieur, …) dans le formulaire de création d’un compte client et que l’utilisateur l’a renseigné lors de son inscription!

Vous pourrez afficher les valeurs récupérées dans un template PHTML en ajoutant la ligne suivante:

Valeurs récupérées:

Code:

Il faudra créer un nouveau module app/code/MyVendor/Customer et y surcharger le Block vendor/magento/module-customer/Block/CustomerData.php.

app/code/MyVendor/Customer/Block/CustomerData.php

Dans votre template PHTML:

Les autres fichiers standard que doit comporter un module Magento 2

app/code/MyVendor/Customer/registration.php

app/code/MyVendor/Customer/etc/di.xml

app/code/MyVendor/Customer/etc/module.xml

Les commandes a exécuter pour rendre votre module disponible

Voici une manière rapide de récupérer le customer ID dans un template PHTML via l’Object Manager de Magento 2

Source: Magento 2 Get Current Customer Id. (Version PDF – tutorialsplane.com-Magento 2 Get Current Customer Id)

A savoir: l’article donne également une manière propre de faire.

[Magento 2] Déplacer un éléments existant dans un layout XML avec la balise Move

Déplacer le titre de page element="page.main.title" dans les pages du compte client

Par défaut dans Magento 2 (version 2.4 lors de mes tests) le titre de page n’est pas posé au même endroit dans le DOM/layout de l’ensemble des pages du compte client.

Exemple pour la page « Modifier les informations du compte »

Pour cette page, on va surcharger le fichier vendor/magento/module-customer/view/frontend/layout/customer_account_edit.xml pour y ajouter la ligne de code suivante:

Problème: avec cette surcharge, nous avons impacté uniquement la page de modification des informations du compte. Si je me rends, par exemple, dans la page « Carnet d’adresses » le titre de page n’est logiquement pas posé au même endroit que dans la page que nous venons de surcharger.

Exemple pour homogénéïser la position du titre sur l’ensemble des pages du compte client

Procéder de la même manière que pour la page « Modifier les informations du compte », mais placer la balise move dans une surcharge du fichier vendor/magento/module-customer/view/frontend/layout/default.xml:

Déplacer les notifications element="page.messages" dans les pages du compte client

Note: en général, cette modification va de pair avec le déplacement du titre de page.

Ces notifications apparaissent lorsque l’utilisateur enregistre des actions de modification via l’un des formulaires de son compte client.

On va surcharger (si ce n’est pas déjà fait) le fichier vendor/magento/module-customer/view/frontend/layout/customer_account_edit.xml pour y ajouter la ligne de code suivante:

Ici, modifier la valeur de before="" si besoin.

[Magento 2] Rajouter des préfixes de civilités sous forme de boutons radio dans le formulaire de création de compte

Attention: astuce fonctionnelle sur une version de Magento 2.4 Enterprise. Je crois que toute la partie attributs des customers n’est pas disponible en version Community Edition. Mais cette astuce pourrait très bien fonctionner avec les deux versions.

PHTML à modifier

Créer le fichier de surcharge app/design/frontend/MyVendor/mytheme/Magento_Customer/templates/widget/name.phtml pour remplacer l’élément Select par des boutons Radio:

A savoir:

Sans ajouter le bout de code ci-dessous, l’information sur le préfixe coché lors de l’inscription ne sera PAS récupérée pour des affichages ultérieurs des préfixes dans les pages du site.

Par exemple, dans la page « Modifier les informations de mon compte », les boutons radio représentant les préfixes disponibles s’affichaient bien, mais celui qui avait été coché lors de l’inscription n’était pas coché!

Manipulations à effectuer en BO – Afficher les préfixes (Madame, Monsieur) dans le formulaire de création de compte

  • Se rendre dans STORES > Attributes > Customer
  • Dans la liste des attributs, sélectionner l’Attribute Code « prefix »
  • Scroller jusqu’au volet « Storefront Properties »
  • Passer le champ « Show on Storefront » à « Yes »
  • Cliquer sur le bouton orange « Save Attribute »
  • Se rendre ensuite dans STORES > Settings > Configuration
  • Passer le Scope au store voulu
  • Dans la navigation de gauche, aller dans CUSTOMERS > Customers Configuration
  • Ouvrir le volet « Name and Address Options »
  • Au niveau du champ « Prefix Dropdown Options », décocher la case « Use Defaults »
  • Dans le champ « Prefix Dropdown Options », saisir les préfixes séparés par des point-virgules (exemple: Madame;Mademoiselle;Monsieur)
  • Cliquer sur le bouton orange « Save Config »
  • Se rendre ensuite dans SYSTEM > Tools > Cache Management
  • Cocher les « Cache Type » « Configuration » et « Page Cache » (leur « Status » est normalement en « INVALIDATED »
  • Au niveau de la liste de sélection située en haut à gauche du tableau, sélectionner « Refresh » et cliquer sur le bouton gris « Submit »

[Javascript] Récupérer la largeur ou la hauteur d’un élément sans les padding, margin, bordure et scrollbar associés avec clientHeight, offsetHeight et parseFloat

Sources:

Dégageage du padding avec getComputedStyle

Faire un console.log(computedStyle); vous donnera une liste de toutes les données récupérées via la méthode getComputedStyle et que vous pourrez exploiter ensuite.

Dans la pratique:

Je veux récupérer la hauteur du contenu de l’élément de DOM .page-leftColumn sans le padding:

Tenir compte de la scrollbar

Voir aussi ici pour ce bout de code modifié pour tenir compte de la scrollbar:

[CSS] Des effets de fonds de couleur avec séparateur oblique avec linear-gradient

dégradé de fond avec effet d’oblique sur codepen.io

[Magento 2] Modifier les stocks directement depuis la base de données

Source: Magento 2, Database Level Inventory Management. Version PDF pour la postérité: danjoseph.me-Magento 2 Database Level Inventory Management.

Retrouver un produit dans la table cataloginventory_stock_item

Utiliser la valeur de product_id qui est visible dans le DOM lorsque le produit est sélectionné, en tant que valeur d’un attribut value pour l’élément input name="selected_configurable_option".

Quelques notes:

  • La valeur de la clé is_in_stock dans la table cataloginventory_stock_item doit rester à 1 si vous souhaitez que la configuration de votre produit reste visible dans l’élément SELECT.

[Magento 2] Erreur Import failed: Invalid Base URL au app:config:import ou au setup:upgrade

Si en tapant la commande: bin/magento app:config:import ou bin/magento setup:upgrade, vous rencontrez l’erreur suivante:

… c’est que vous avez quelque part dans un fichier de conf (app/etc/config.php ou app/etc/env.php) ou en base de données (dans la table core_config_data en général) une URL qui ne se termine pas par un caractère slash /.

En effet, les URLs dans les confs et la base de données Magento 2 doivent toutes obligatoirement se terminer par un slash!

Erreur documentée ici sur le site d’Alan Storm: Invalid Base URL. Value must be a URL or one of placeholders: {{base_url}} mais aussi dans certains fils de discussion comme celui-ci sur magento.stackexchange.com.

Note: ça ne me paraît pas logique, mais j’ai eu à nouveau le message d’erreur Import failed: Invalid Base URL. Value must be a URL or one of placeholders: {{base_url}} même après avoir modifié la valeur de la clé base_url dans la table core_config_data pour ajouter un caractère slash à la fin de l’URL et après avoir réussi à accéder à mon front-office une première fois.
J’ai alors fait un dump de ma config via la commande bin/magento app:config:dump (ATTENTION: cette commande écrase le fichier app/etc/config.php existant sans en faire une copie de sauvegarde au préalable!), puis rafraîchi immédiatement mon front. Il s’est affiché.

[Magento 2] Créer un compte administrateur à la main

  • Aller dans la table admin_user et supprimer tous les comptes admin dont vous n’avez pas l’usage
  • Exécuter la commande: $ n98-magerun2 admin:user:create et répondre aux questions posées
  • Aller dans la table admin_passwords. Le mot de passe du compte que nous venos de créer via la ligne de commande va expirer rapidement. Pour éviter cela, localiser la ligne relative à ce compte et la supprimer.

[Magento 2] Eviter la redirection automatique de mon instance locale vers la prod lorsque j’affiche une page dans mon navigateur

Pour le frontoffice

Dans la table core_config_data, faire une recherche sur l’URL vers laquelle vous êtes redirigé et remplacer toutes les occurrences (au moins les « unsecure » qui sont préfixées par http) par votre URL locale.

Pour le backoffice

Dans la table core_config_data, rechercher (n’importe où) | LIKE %% | url.

Vérifier que la ligne contenant le path admin/url/use_custom est à 0.

Ensuite, pour toutes les lignes où l’URL déclarée dans la colonne value est celle du domaine vers lequel on est redirigé, remplacer toutes les occurrences par votre URL locale.

Pour finir, exécuter la commande $ php bin/magento ca:cl config.

[Magento 2] Etendre un mixin existant

Etendre une extension de widget existante dans Magento 2 n’est pas possible. Il faut obligatoirement surcharger l’extension existante en déclarant l’extension initiale à false dans le fichier requirejs-config.js du module (pouvant être différent) qui contient la nouvelle extension:

Notes:

  • la bonne pratique consiste à placer les extensions de widgets dans des modules (app/code/...) plutôt que dans un thème.

© 2020 devfrontend.info

Theme by Anders NorénUp ↑