Après avoir été un observateur de longue date, j'ai enfin une question à laquelle je ne trouve pas de réponse. J'ai essayé de chercher, ici et sur Google, mais en vain.
J'utilise Drupal 8.3.2 avec le module Drupal Commerce 2).
J'essaie de thème une page de produit. J'ai changé twig débogage et créé mon propre fichier 'commerce-product.html.twig' pour écraser celui par défaut.
Le problème que j'ai est que je veux pouvoir insérer les différents champs dans le HTML en utilisant le moteur de modèle twig comme je l'ai fait pour les types de contenu personnalisés sur certaines des pages de mon site .
<div class="header">
<h5>{{ fields.field_header.content}}</h5>
</div>
<div class="body">
{{ fields.body.content}}
</div>
Pour l'exemple ci-dessus, j'ai créé une vue et un bloc, et dans le bloc, j'ai utilisé le balisage ci-dessus pour appeler les valeurs de champ dans la vue.
Maintenant que je suis arrivé sur la page du produit, je ne sais pas quelle est la bonne façon de procéder.
Dois-je créer une vue pour une page de produit, ou puis-je appeler les valeurs de produit de la même manière que ci-dessus. Par exemple.
{{ product.field_product_image.content}}
Ou dois-je créer une vue et sélectionner les champs que je veux afficher, etc. de la même manière que ce que j'ai fait pour mes types de contenu personnalisés.
J'ai essayé de chercher la réponse, mais je n'ai pas pu trouver beaucoup d'aide.
C'est là que j'ai atterri ici, faisant mon premier post.
Vous devez commencer par copier le modèle à partir du module Commerce /modules/contrib/commerce/modules/product/templates/commerce-product.html.twig:
{#
/**
* @file
*
* Default product template.
*
* Available variables:
* - attributes: HTML attributes for the wrapper.
* - product: The rendered product fields.
* Use 'product' to print them all, or print a subset such as
* 'product.title'. Use the following code to exclude the
* printing of a given field:
* @code
* {{ product|without('title') }}
* @endcode
* - product_entity: The product entity.
* - product_url: The product URL.
*
* @ingroup themeable
*/
#}
<article{{ attributes }}>
{{- product|without('variation_attributes') -}}
</article>
Vous pouvez ensuite ajuster l'affichage en fonction de vos champs personnalisés, donc quelque chose comme:
<article{{ attributes.addClass('product') }}>
{{ product.field_header }}
<div class="body">
{{ product.body }}
<div>
{{- product|without('field_header','body') -}}
</article>