Bonjour,

Je suis en train de travailler sur un menu déroulant administrable, pour celà j'ai une table qui contient les menu parent, une table qui contient les catégories des sous menus afin de créer des groupes de sous menus et enfin une table qui contient mes sous menu qui sont associés aux catégories, j'aimerai avoir votre avis sur la meilleur façon de procéder, car j'ai mis une clé étrangère category_id dans la table des sous-menus et une clé étrangère post_id dans la table categories

Merci d'avance

6 réponses


Pakito
Réponse acceptée

D'après tes models, ce que je ferai c'est :

  • récupérer toutes les catégories, avec une récursivité qui permet de récupérer tous les submenus de chaque catégorie

  • foreach category, tu affiches dans un titre

  • s'il y a un submenu ou plus dans ta cétégorie, tu ajoute ton container de submenus

  • foreach submenu, tu l'affiches

  • si tu avais un submenu ou plus, tu fermes ton container de submenus

  • le système va alors passer à la catégorie suivante

Peut-être que mettre le tout dans une seule table gérée en arbre (TreeBehavior) serait plus simple.
Perso c'est comme ça que je ferais.

Merci pour ta réponse, c'est vrai que c'est plus simple avec une seul table, la création c'est ok mais le problème c'est la récupération, afficher dans le menu déroulant les éléments par associations.

Pour être plus précis, voici le debug des informations que je reçoi :

'Submenu' => array(
            'id' => '11',
            'name' => 'SDSL',
            'slug' => 'sdsl',
            'content' => '',
            'order' => '0',
            'post_id' => '5',
            'category_id' => '3',
            'link' => array(
                'controller' => 'submenus',
                'action' => 'show',
                'id' => '11',
                'slug' => 'sdsl'
            )
        ),
        'Category' => array(
            'id' => '3',
            'name' => 'Réseaux',
            'slug' => 'reseaux'
        )
    ),
    (int) 1 => array(
        'Submenu' => array(
            'id' => '32',
            'name' => 'ADSL',
            'slug' => 'adsl',
            'content' => '',
            'order' => '0',
            'post_id' => '5',
            'category_id' => '3',
            'link' => array(
                'controller' => 'submenus',
                'action' => 'show',
                'id' => '32',
                'slug' => 'adsl'
            )
        ),
        'Category' => array(
            'id' => '3',
            'name' => 'Réseaux',
            'slug' => 'reseaux'
        )
    ),
    (int) 2 => array(
        'Submenu' => array(
            'id' => '21',
            'name' => 'Téléphonie IP',
            'slug' => 'telephonie-ip',
            'content' => '',
            'order' => '0',
            'post_id' => '5',
            'category_id' => '4',
            'link' => array(
                'controller' => 'submenus',
                'action' => 'show',
                'id' => '21',
                'slug' => 'telephonie-ip'
            )

Chaque sous menu a sa catégorie, en fait je veux afficher qu'une seul fois les catégories, donc je ne peux pas faire de foreach pour les afficher, je veux afficher dans un titre les catégories et en dessous leur sous menu associé

Mon problème était que mes sous menu étaient reliés aux menus parent alors qu'ils devaient être relié aux catégories du coup j'ai pu mieux gérer l'affichage et ça fonctionne :)

Merci à toi Pakito

Ravi que ça fonctionne ;)