• app/code/Vendor/PageBuilder/view/adminhtml/web/js/content-type/preview-mixin.js
  • app/code/Vendor/PageBuilder/view/adminhtml/web/js/utils/prod-all.js
  • app/code/Vendor/PageBuilder/view/adminhtml/web/js/utils/prod-delayed-loading.js
  • app/code/Vendor/PageBuilder/view/adminhtml/web/js/content-type/module-13/preview.js
  • app/code/Vendor/PageBuilder/view/adminhtml/web/js/content-type/module-13-item/preview.js
  • app/code/Vendor/PageBuilder/view/adminhtml/web/template/content-type/module-13-item/default/preview.html
  • app/code/Vendor/PageBuilder/view/frontend/templates/widget/product/simple.phtml
  • app/code/Vendor/PageBuilder/view/adminhtml/web/js/resource/vendor/sly.js (Librairie 3-rd party Sly v1.6.1)

app/code/Vendor/PageBuilder/view/adminhtml/web/template/content-type/module-13-item/default/preview.html

app/code/Vendor/PageBuilder/view/adminhtml/web/js/content-type/preview-mixin.js

Pour l’ajout de notre widget Vendor_PageBuilder/js/utils/prod-delayed-loading en tant que composant:

…et en toute fin de fichier, l’initialisation du composant:

app/code/Vendor/PageBuilder/view/adminhtml/web/js/utils/prod-all.js

Un module façon requireJS pour stocker des fonctions amenées à être utilisées dans plusieurs fichiers:

app/code/Vendor/PageBuilder/view/adminhtml/web/js/utils/prod-delayed-loading.js

Dans ce module, de nombreuses utilisations de la variable widget qui contient, sous forme de string, les données nécessaires à l’affichage du produit:

  • La valeur de l’attribut entity correspond l’ID du produit dans le catalogue. Je la récupère via une regex dans la fonction getProductId consignée dans le fichier app/code/Vendor/PageBuilder/view/adminhtml/web/js/utils/prod-all.js.
  • La valeur de l’attribut template correspond à la vue dans laquelle les données vont être affichées, en front comme en admin.

app/code/Vendor/PageBuilder/view/adminhtml/web/js/content-type/module-13/preview.js

Ajout d’une fonctionnalité « Show All » dans les options du module:

Plus bas, définition de la fonction showAll (noter comment l’habituel $ de jQuery est remplacé par (0, _jquery)):

app/code/Vendor/PageBuilder/view/adminhtml/web/js/content-type/module-13-item/preview.js

Points d’intérêt pour explorer et étendre le code:

_events.on("<em><nom_du_module></em>:renderAfter", function (args) { correspond à différents événements (:renderAfter, :updateAfter, …) qui se déclenchent au chargement du module en BO.

Les objets contentType (cf. bout de code suivant) et args contiennent également pas mal d’infos exploitables.

afterObservablesUpdated: le code qui s’exécute après que l’utilisateur ait cliqué sur le bouton « Save » (j’ai par exemple ajouté l’exécution d’une fonction setProductId qui ajoute un data-attribute dans le DOM, avec pour valeur un ID de produit):

this.contentType.id me donne l’ID du produit sur lequel j’ai itéré en sauvegardant.

app/code/Vendor/PageBuilder/view/frontend/templates/widget/product/simple.phtml