Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
symfony4:twig_affichage_arborescence [2020/04/07 12:44] marclebrun |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Affichage d'une arborescence ====== | ||
- | |||
- | Voici une arborescence constituée d'une entité Catégorie ayant des | ||
- | propriétés **parent**, **enfants** et **ordre**. | ||
- | |||
- | Dans le contrôleur, on récupère d'abord toutes les catégories de niveau | ||
- | supérieur, c-à-d celles dont le parent est ''null''. | ||
- | |||
- | <code php MonControleur.php> | ||
- | public function categories(CategoriesRepository $repo) { | ||
- | |||
- | // Lire toutes les catégories de niveau supérieur | ||
- | $categs = $repo->findByParent(null); | ||
- | | ||
- | // Envoyer ces catégories au template Twig | ||
- | return $this->render('mon_controleur/liste_categories.html.twig', [ | ||
- | 'categories' => $categs | ||
- | ]); | ||
- | } | ||
- | </code> | ||
- | |||
- | Le code **Twig** ci-dessous utilise une macro qui sera appelée récursivement | ||
- | pour afficher les catégories et leurs enfants. | ||
- | |||
- | À chaque boucle ''for'', les élements sont triés (filtre ''sort'') sur base | ||
- | de leur propriété ''ordre''. | ||
- | |||
- | <code twig mon_controleur/liste_categories.html.twig> | ||
- | {% extends 'base.html.twig' %} | ||
- | |||
- | {% macro afficheCateg(categorie) %} | ||
- | <ul> | ||
- | <li>#{{categorie.ordre}} : {{categorie.id}}. {{categorie.denom}}</li> | ||
- | {% for enfant in categorie.enfants | sort((a, b) => a.ordre <=> b.ordre) %} | ||
- | {{ _self.afficheCateg(enfant) }} | ||
- | {% endfor %} | ||
- | </ul> | ||
- | {% endmacro %} | ||
- | |||
- | {% block body %} | ||
- | <h1>Catégories</h1> | ||
- | |||
- | {% for categorie in categories | sort((a, b) => a.ordre <=> b.ordre) %} | ||
- | {{ _self.afficheCateg(categorie) }} | ||
- | {% endfor %} | ||
- | |||
- | {% endblock %} | ||
- | </code> | ||