- 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.
Mois : octobre 2020
[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
- how to add methods to a javascript file by using mixins?. L’OP utilise un plug-in Amasty qui étend déjà du code standard via un mixin. Il souhaite ajouter des méthodes en étendant le mixin existant par un nouveau mixin.
- Magento 2 DevDocs – JS Mixins
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:
1 2 3 4 5 6 7 8 9 10 |
var config = { config: { mixins: { 'Magento_Checkout/js/view/shipping': { 'Vendor_Module/js/new-widgetextension': true, 'Vendor_Module/js/alreadyexisting-widgetextension': false } } } }; |
Notes:
- la bonne pratique consiste à placer les extensions de widgets dans des modules (
app/code/...
) plutôt que dans un thème.
[Magento 2] Authentication required (repo.magento.com) lors d’un composer install
Attention: Il faut avoir un compte sur marketplace.magento.com.
En cherchant dans votre profil sur marketplace.magento.com
Récupérer le login (clé publique) et le mot de passe (clé privée) sous My Profile > My Products > Access Keys. Il sera peut-être nécessaire de générer une paire de clé.
Le Username demandé correspond à la clé publique. Le Password demandé correspond à la clé privée. Et PAS aux username et password de votre compte marketplace.magento.com!
En cherchant dans le fichier auth.json
de Composer:
Aller tout à la racine de sa machine (dossier parent de « /home ») et taper:
1 |
sudo find . -name "auth.json" |
Le résultat devrait vous afficher une ligne de ce type:
1 |
./home/intlangf/.composer/auth.json |
Faites:
1 |
cat ./home/intlangf/.composer/auth.json |
Le fichier vous révèle les Username et Password pour repo.magento.com.
La procédure d’install va ensuite vous demander:
Do you want to store credentials for repo.magento.com in /root/.composer/auth.json ?
Si vous être sur votre machine, répondez: Y
. Dans un container, répondez: n
.
[Magento 2] Utilisation de before et after sur les containers dans les layout xml
Doc officielle: Layout instructions
Le truc à retenir est que les attributs before
et after
applicables sur les balises container
et block
des layouts XML de Magento 2 ont BESOIN d’un contexte pour fonctionner. Exemple:
Pas bon:
L’attribut before
ne fonctionnera PAS! Votre block cart.product.slider
ne s’affichera pas ou s’affichera au mauvais endroit (ou au bon endroit sur un malentendu… jusqu’à la prochaine modification de layout que vous effectuerez).
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <update handle="checkout_cart_item_renderers"/> <body> <container name="cart.product.slider.container" htmlTag="div" htmlClass="page-bottom" before="page.bottom.container"> <block class="Magento\Cms\Block\Block" name="cart.product.slider"> <arguments> <argument name="block_id" xsi:type="string">cart-product-slider</argument> </arguments> </block> </container> </body> </page> |
Bon:
L’attribut before
fonctionnera!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <update handle="checkout_cart_item_renderers"/> <body> <referenceContainer name="content"> <container name="cart.product.slider.container" htmlTag="div" htmlClass="page-bottom" before="page.bottom.container"> <block class="Magento\Cms\Block\Block" name="cart.product.slider"> <arguments> <argument name="block_id" xsi:type="string">cart-product-slider</argument> </arguments> </block> </container> </referenceContainer> </body> </page> |
Vous avez saisi la différence entre les deux samples de code ci-dessus?
La ligne <referenceContainer name="content">
précise un contexte, une parenté. Les containers cart.product.slider.container
et page.bottom.container
sont des enfants directs du container content
.
[Magento 2] Ajouter une mise à jour de layout pour une page CMS (custom layout update)
Testé fonctionnel Magento 2.3.4 et 2.4.0.
- Documentation officielle Magento 2: Create cms-page/product/category-specific layouts
- Tutoriel Amasty: How to add the Custom Layout Update on Magento 2.3.4?
Pour une page CMS:
Dans le code source du projet:
Le fichier à utiliser comme modèle est le suivant: vendor/magento/module-cms/view/frontend/layout/cms_page_view.xml
.
Pour une page CMS, créer un fichier app/design/frontend/Vendor/theme/Magento_Cms/layout/cms_page_view_selectable_<clé d'URL>_<libellé de votre layout update tel qu'il apparaît dans le champ en BO>.xml
.
Exemple: pour une page CMS dont la clé d’URL est « test-karine » (en front: https://agriculture-vitalconcept-prod.sodicloud.fr/test-karine):
Si une page avec la même clé d’URL existe sur tous vos stores: app/design/frontend/Vital/vital/Magento_Cms/layout/cms_page_view_selectable_test-karine_TestKarine.xml
.
Si la page n’existe que sur un store en particulier (agriculture dans mon exemple): app/design/frontend/Vital/agriculture/Magento_Cms/layout/cms_page_view_selectable_test-karine_TestKarine.xml
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="sidebar.main"> <!--Remove default compare functionnality--> <referenceBlock name="catalog.compare.sidebar" remove="true"/> <!--Remove default wishlist functionnality--> <referenceBlock name="wishlist_sidebar" remove="true" /> <referenceBlock name="multiple-wishlist_sidebar" remove="true" /> <!--Add some block--> <block class="Magento\Cms\Block\Block" name="block.karine"> <arguments> <argument name="block_id" xsi:type="string">block-karine</argument> </arguments> </block> </referenceContainer> <referenceContainer name="sidebar.additional"> </referenceContainer> <referenceContainer name="content"> <referenceBlock name="cms_page"/> </referenceContainer> </body> </page> |
Depuis le BO:
Créer une page (dans mon exemple, dont la clé d’URL est « test-karine »)
Dans le détail de cette page, dans le volet Design, champ custom layout update, on sélectionne « TestKarine »
Pour personnaliser le contenu de la sidebar, créer un block (dans mon exemple, dont l’identifier est « block-karine »)
[Magento 2] Supprimer le supplément de prix du champ Select pour un produit configurable
Testé fonctionnel sur une version 2.3. Source: MAGENTO 2 – REMOVE PRICE FROM SELECT DROPDOWN ON CONFIGURABLE PRODUCTS.
Partie à commenter dans la surcharge que vous ferez du fichier vendor/magento/module-configurable-product/view/frontend/web/js/configurable.js
dans votre thème:
1 2 3 4 5 6 7 |
if (optionPriceDiff !== 0) { options[i].label += ' ' + priceUtils.formatPrice( optionPriceDiff, this.options.priceFormat, true ); } |
[Magento 2] Utiliser action method= »setTemplate » pour surcharger un fichier PHTML dans app/code/Vendor/Module plutôt que dans un thème
Je veux surcharger app/code/Magento/LayeredNavigation/view/frontend/templates/layer/view.phtml
dans app/code/NakedUi/LayeredNavigation/view/frontend/layer/view.phtml
. Source: How to Override a phtml File Using a Custom Module in Magento 2.
Créer un module NakedUi_LayeredNavigation qui contient au minimum les fichiers suivants:
./registration.php
1 2 3 4 5 |
<?php use Magento\Framework\Component\ComponentRegistrar; ComponentRegistrar::register(ComponentRegistrar::MODULE, 'NakedUi_LayeredNavigation', __DIR__); |
./etc/module.xml
1 2 3 4 5 6 7 8 |
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="NakedUi_LayeredNavigation"> <sequence> <module name="Magento_LayeredNavigation" /> </sequence> </module> </config> |
Puis dans ./view/frontend/layout, créer les deux fichiers suivants:
catalog_category_view_type_layered.xml et catalogsearch_result_index.xml
1 2 3 4 5 6 7 8 9 10 |
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="catalog.leftnav"> <action method="setTemplate"> <argument name="template" xsi:type="string">NakedUi_LayeredNavigation::layer/view.phtml</argument> </action> </referenceBlock> </body> </page> |
Ne pas oublier de surcharger ./view/frontend/templates/layer/view.phtml
[Magento 2] un assistant qui surveille les changements de code et vide les caches en fonction des types de fichiers modifiés
Magento 2 Cache Clean – A faster drop in replacement for bin/magento cache:clean
with a file watcher.
L’outil marchotte sans plus. Je travaille sous Linux, dans un environnement de dev Dockerisé. J’ai rencontré plusieurs problèmes avant de pouvoir l’utiliser:
Erreur « Error NOSPC »
(Si sudo
n’est pas installé dans votre container (il vous le fera comprendre…)) Sortir du container et exécuter la commande: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
.