Outils pour utilisateurs

Outils du site


symfony4:twig_affichage_arborescence

Affichage d'une arborescence

Voici une arborescence constituée d'une entité Catégorie ayant les propriétés suivantes :

  • parent : catégorie mère (null pour une catégorie de niveau supérieur)
  • enfants : collections de catégories filles (peut être vide)
  • ordre : entier représentant l'ordre de tri des catégories dans une liste

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.

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
    ]);
}

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.

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 %}
symfony4/twig_affichage_arborescence.txt · Dernière modification: 2020/04/07 12:47 par marclebrun