Note: pour mettre en place l’upload d’image, nous allons installer l’extension magento2-widget-parameters. Je vous invite à consulter le billet de blog suivant pour la démarche à suivre: [Magento 2] Ajouter un sélecteur d’image ou un champ WYSIWYG dans un widget custom.

Convention: on part du principe qu’on crée un widget pour le vendor Sodifrance et le module Pdv.

Une fois l’extension magento2-widget-parameters installée, nous allons créer les fichiers suivants:

app/code/Sodifrance/Pdv/etc/widget.xml

Le champ « Clé d’URL de la page de destination » est en required="false" car l’utilisateur n’est pas obligé d’associer un lien pointant vers une autre page à ce widget. Nous verrons avec le code de la vue PHTML comment nous gérons ça en PHP par le biais d’une condition if/else.

app/code/Sodifrance/Pdv/Block/Widget/TwoColsDynamic.php

Ici, on crée 2 fonctions publiques:

  • getWidgetMediaUrl() qui récupère l’URL de base du site, lui ajoute le chemin vers l’endroit où reposent les médias de contenu éditorial dans Magento 2 et le libellé et le format de l’image uploadée via le widget en BO.
  • getWidgetTargetPageUrl() qui récupère l’URL de base du site et lui ajoute la clé d’URL de la page cible, telle que renseignée via le widget en BO.

Note: dans l’IDE PHP Storm, il est possible de ne taper que les lignes suivantes:

Ensuite, placez le curseur sous ces lignes et faites le raccourci Alt + Inser. Vous aurez accès à une liste de bouts de code que l’IDE se propose d’écrire pour vous! Si vous choisissez « constructor » et que vous sélectionnez ensuite les 2 entrées $helper et $urlInterface (placez le curseur sur la première, puis Maj + flèche du bas), le constructeur sera généré automatiquement.

app/code/Sodifrance/Pdv/view/frontend/templates/widget/twocolsdynamic.phtml

Dans le template PHTML, on ajoute une condition <?php if (!empty($block->getData('block_link'))): ?> qui vérifie si le champ URL est rempli en BO et génère du HTML en fonction.

Flushez vos caches; le widget devrait être disponible en backoffice!