manipulation type de contenu dans un template

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

j'ai du mal avec le système de templating de drupal avec twig.

Pour un site de restaurant, j'ai une page "carte du restaurant".
je pense pouvoir utilisé les fonctionnalité basique de drupal sans avoir besoin de développer un module.

J'ai créer un vocabulaire de taxonomie "catégorie", avec comme terme par exemple "entrée, plats, dessert, etc"

J'ai créer un type de contenu "produit", avec les champ titre, image, description, prix seul, prix menu, et la taxonimie categorie.

J'aimerai simplement récupérer tout sa dans un fichier twig pour construire simplement la structure html, ors, a ma grande surprise, je trouve sa très compliquer !

Comment faire sela simplement?

Pour le moment j'ai créer une vue "carte de restaurant", avec comme contenu les produits.

si je créer le fichier page--carte-de-restaurant.hml.twig, je n'ai accès qu'a la variable "page.content", mais je ne vois pas comment bouclé sur chaque produits.

j'ai pue modifier le bloque "produits" avec ce nom de fichier node--view--carte-du-restaurant.html, mais c'est loin d'être suffisant !

je veut regrouper chaque produit dans des sections de categorie, je veut afficher un menu d'ancre pour les catégorie, et je veut listé tout sa avec des liste de définition (dl > dt + dd).

Bref, j'ai vraiment besoin d'être aiguiller un minimum parce que la je pédale dans la semoule !

merci d'avance

Forum : 

Salut Snyf,

Oui il y a peu de réponses concernant les questions qui portent autour de Drupal 8 dans la communauté FR. Je te conseilles d'attendre encore jusqu'à septembre (mois à titre indicatif) avant d'utiliser D8 qui manque encore cruellement des portages de modules.

Tu trouveras par contre bien plus de réactivité sur le forum officiel (en anglais).

Cependant, en faisant une simple recherche google j'ai trouvé la réponse à ta question :
Ton fichier twig doit se nommer de la façon suivante :

views-view--carte-du-restaurant--page.html.twig

Dans ce cas là, on assume que le nom machine de ta vue est "carte-du-restaurant".

Tu trouveras plus d'infos sur cette page dans les paragraphes "Understanding Views Templates" & "Naming Views Templates" :
http://redcrackle.com/blog/drupal-8/theme-views-templates

yes merci ! cette article est bien foutu !

Sinon est-ce que je m'y prend correctement ? Ou vaut t'il mieux que je créer un module ?

Il me semble que le principe restera le même sous drupal 7 .
J'ai effectivement remarquer que la communauté anglaise était plus réactive, forcément :) mais bon j’essaye ici avant.

Oui tu t'y prends correctement, pas besoin de module. Ce que tu semble vouloir faire correspond bien à une vue.

Cependant, j'ai du mal à comprendre pourquoi tu as besoin de créer un template spécifique pour ta vue. Ca fait quelques années que j'utilises Drupal, et j'ai rarement eu à modifier les templates de mes vues (disons 15% des vues que j'ai créées utilisent un template spécifique), le module view étant déjà très complet.

Dans ton cas, pourquoi utiliser un template spécifique ? Éventuellement si tu as une maquette ou bien un schéma sur la façon dont tu veux afficher tes données pour que je puisse mieux saisir et te filer un coup de main sur les bonnes pratiques ? Aussi, un screenshot des paramètres ta vue dans l'état actuel serait d'une grande aide.

Cool merci pour ton aide.

J'ai vue que la vue m'offre en effet un niveau de personalisation très élever.
cependant je n'arrive pas du tout a avoir la structure voulu.

Si on reprend mon modèle, j'ai des produits répartie dans différente catégorie.
Mes produits, c'est un type de contenu "produit", les catégorie, c'est une taxonimie "catégorie". Mes porduits on donc un champ "catégorie".

Voici ce que je voudrai grossièrement au niveau du DOM:

<div class="categorie" id="entree">
    <h2>Entrée</h2>
    <dl>
        <dt>salade <img src="/img/salade-small.jpg" alt=""/></dt>
        <dd>
           <div class="image">
               <img src="img/salade-big.jpg" alt=""/>
           </div>
            <div class="desc">de la salade sale
            </div>
            <div class="prix">5e50</div>
        </dd>
        <dt>paté <img src="/img/pate-small.jpg" alt=""/></dt>
        <dd>
            <div class="image">
                <img src="img/pate-big.jpg" alt=""/>
            </div>
            <div class="desc">du paté épatant
            </div>
            <div class="prix">5e50</div>
        </dd>
    </dl>
</div>
<div class="categorie" id="plat">
    <h2>plat</h2>
    <dl>
        <dt>nouille <img src="/img/nouille-small.jpg" alt=""/></dt>
        <dd>
            <div class="image">
                <img src="img/nouille-big.jpg" alt=""/>
            </div>
            <div class="desc">oui mais des penzani
            </div>
            <div class="prix">5e50</div>
        </dd>
        <dt>gratin de courge <img src="/img/courge-small.jpg" alt=""/></dt>
        <dd>
            <div class="image">
                <img src="img/courge-big.jpg" alt=""/>
            </div>
            <div class="desc">c'est la saison
            </div>
            <div class="prix">5e50</div>
        </dd>
    </dl>
</div>

Au dessus de tout sa, je voudrait un sous menu,
comme ceci :

<ul>
    <li><a href="#entree">Entrée</a></li>
    <li><a href="#plat">Plat</a></li>
</ul>

howdoyoudothat?

Ah oui j'avais oublié que tu souhaitais utiliser les balise dl dd dt.
Dans ce cas je te proposes ce module complémentaire (que je ne connais pas) :
https://www.drupal.org/project/semanticviews

Ta vue doit bien charger des champs et non pas des teasers ou des contenus complets.

Pour le tri par catégorie, dans la partie "Avancée" de ta vue (3ème colonne), ajoutes le lien de relation (relationship) qui s'appelle "Content: Taxonomy terms on node", sélectionne ton vocabulaire "Catégorie".
Ajoutes ensuite un critère de tri par taxonomie, et indique le lien de de relation que tu viens de créer.
Ainsi, les entrées seront ensemble, idem pour les plats.

Pour ton menu, dans D8 j'ai cru comprendre que l'on pouvait directement intégrer un menu (block) depuis une vue (dans le header/footer (deuxièmme colonne de l'interface de view)).

Bon courage.

Woookay, je commence a comprendre le principe de la vue !

je vois a peut près comment tout configurer sans touché au fichier twig, sauf pour un point:

wrapper mes "produit" dans les bloque "categorie", et afficher un titre a chacune de ces catégorie.

Pour le moment quand j'ajoute le champ termes de taxonomie, il me les affiche dans chaque noeud "produit".

Or il ne doivent apparaître qu'une foi.

par exemple comme ceci :

<div class="categorie" id="entree">
<h2>Nos entrées</h2>
// ...tout les produit entrée
</div>

<div class="categorie" id="plat">
<h2>Nos plats</h2>
// ...tout les produit plats
</div>

Suite aux indications fournies dans mon post précédent, tes noeuds sont-ils bien triés par leur termes de taxonomies respectifs ? J'entends par là que les entrées sont bien avec les entrées, plats avec plats, etc. ?

Pour que la catégorie n’apparaisse pas sur chaque row (row = ligne = 1 noeud de ta vue), dans la première colonne partie champs, tu dois cliquer sur ton champ Taxonomie catégorie et cocher la case Exclure de l'affichage", ainsi ton champ sera chargé pour le tri mais n’apparaîtra plus sur chaque row.

Si tu veux plus d'aide j'aurais besoin d'un screenshot des paramètres de ta vue pour voir où tu en es à peu près.

oui tout est bien trié correctement, ce que je veut c'est afficher le terme de taxonomie au dessus de chaque "groupe", et si possible wrapper le tout dans une div.

apercu vue

edit: je sais pas pourquoi mais l'image s'affiche pas, voici un lien ->Lien

edit 2:
avec le tableau "avancé" dérouler: -> autre lien

À priori ta vue devrait afficher le terme de taxonomie en au dessus de tes éléments groupés comme tu le souhaites. Il doit bien y avoir quelque chose qui cloche mais là je ne vois pas.

J'ai pas le temps de trop regarder en détail, je regarderais et ferais quelques tests ce soir.

Youpi ! j'ai trouvé !

Dans les paramètre du format, il faut choisir dans champ de groupement n'1 le champ que le veut pour le regroupement, ici 'termes de taxonomie', et bingo sa marche !

Merci encore pour ton aide, probablement a bientôt !