Étiquette : bloc

[RBS Change 3.x] Attribuer un ID unique à un élément

Problème : nous avons un template de bloc unique (un menu dans notre exemple) qui est utilisé plusieurs fois dans la page, chaque fois pour afficher un contenu différent mais avec un balisage similaire. Nous voulons cependant attribuer un ID unique à chaque occurence de ce bloc dans le DOM (dans notre exemple, pour pouvoir les ouvrir/fermer avec le composant Collapse de Bootstrap 3).

Solution : appliquer ${root/getDocument/getId} sur la valeur des attributs href et id :

[Hybris] Créer et appeler un fichier *.tag

Objectif: créer un fichier *.tag comprenant les informations de disponibilité relatives à un produit (stock).

La page de détail d’un produit dans Hybris embarque un composant addtocart consigné dans un fichier web/webroot/WEB-INF/views/responsive/cms/productaddtocartcomponent.jsp. Ce composant sert de base à l’affichage de plusieurs éléments :

  • un sélecteur de quantité,
  • des informations de disponibilité produit (stock),
  • des actions (boutons d’ajout au panier, retrait en magasin, ajout à la liste de souhaits.

Nous allons extraire les informations de disponibilité produit du composant productaddtocartcomponent.jsp pour les placer dans un fichier tag spécifique web/webroot/WEB-INF/tags/responsive/product/speProductStock.tag. Voici le bout de code à extraire :

Notre tag ne pourra pas être exploité en l’état : il faut intégrer en en-tête la logique […]

Plusieurs choses dans ces en-têtes :

  • <%@ tag body-content="empty" trimDirectiveWhitespaces="true" %>
  • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  • <%@ taglib prefix="theme" tagdir="/WEB-INF/tags/shared/theme" %>
  • <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
  • <%@ attribute name="product" required="true" type="de.hybris.platform.commercefacades.product.data.ProductData" %>
  • <%@ attribute name="divCSS" required="false" %>

Dans un fichier *.tag ou *.jsp :

Va afficher en front :

[Change cross commerce] Surcharger un template issu d’un module standard dans un thème personnalisé

Attention : doc en cours de rédaction …

Surcharger le template qui affiche la liste de produits

Arborescence standard : où trouve-t’on les templates standards ?

Deux types de fichiers concernés : les directives Angular JS et les blocs

Arborescence d’un thème personnalisé : où consigner nos surcharges des templates standards ?

blocks-templates.json : déclarer l’existence d’une surcharge de template pour la rendre exploitable en backoffice.

Le fichier json permet également de passer un certain nombre de paramètres.

admin.json : créer une locale pour identifier votre nouveau template en backoffice.

Nomenclature

La surcharge d’un template se trouvant nativement dans le répertoire Plugins/Modules/[nom_du_vendor]/[nom_du_module]/Assets/Twig/Blocks/ se fera obligatoirement dans le répertoire App/Themes/[nom_du_vendor]/[nom_de_votre_plugin]/Assets/Twig/[nom_du_vendor]_[nom_de_votre_plugin]/Blocks/.

Ainsi, pour notre exemple de liste produits, le template product-list.twig se trouvant nativement dans le répertoire Plugins/Modules/Rbs/Catalog/Assets/Twig/Blocks/ se fera obligatoirement dans le répertoire App/Themes/Project/[nom_de_votre_plugin]/Assets/Twig/Project_[nom_de_votre_plugin]/Blocks/.

Attention : l’unique emplacement censé regrouper les surcharges de l’ensemble des templates des répertoires Twig/Blocks/ de tous les modules de Change Cross Commerce pouvant se retrouver rapidement saturé de fichiers, il est conseillé pour optimiser la lisibilité de préfixer les libellés de vos fichiers surchargés.

Ainsi, la surcharge du fichier standard product-list.twig pourrait se nommer rbs-catalog-product-list.twig pour [nom_du_vendor]-[nom_du_plugin]-[nom_du_template_standard].twig.

Utilisation de {% extends %} : rbs-catalog-product-list.twig

Utilisation de {% use %} : product-list-directives.twig

rbs-order-order-detail.twig

On n’utilise ni {% extends %}, ni {% use %} dans ce cas là :

Remarque : Les surcharges de fichiers issus des répertoires Blocks/ peuvent contenir des directives Angular issues des fichiers [libellé]-directives.twig. Ceci évite de surcharger un fichier supplémentaire.