2009-02-16 15 views
3

Bien que je trouve que le framework PHP Symfony est merveilleux pour beaucoup de choses, j'ai du mal à créer des menus dynamiques facilement évolutifs pour un site web. Je me demande comment d'autres développeurs de Symfony ont résolu ce problème. Je vais donner un exemple simple de ce que je demande.Comment créer un menu dynamique dans Symfony

Si vous allez sur www.fool.com, vous verrez qu'ils ont une configuration de menu typique. Une liste de catégories avec l'une d'entre elles étant celle active qui est en quelque sorte mise en évidence avec CSS.

Ce qui serait un bon moyen de le créer dynamiquement dans un projet Symfony. Passer des variables de quelque sorte de module à module. Je n'ai pas encore trouvé une solution élégante.

Répondre

4

Généralement, je construis manuellement un tableau de combinaisons de modules/actions que j'aimerais voir apparaître dans mon menu. Il serait assez facile de saisir cette information d'une source dynamique (comme un fichier de configuration, ou une base de données):

$this->menu = array(
    'Home' => array('default', 'index'), 
    'About Us' => array('default', 'aboutUs'), 
    'Products' => array('products', 'index') 
); 

Ensuite, j'utilise les méthodes getActionName et getMethodName du contrôleur pour déterminer quel élément dans mon menu l'actuel:

$this->current = array_search(array($this->getModuleName(), $this->getActionName()), $this->menu); 

Ensuite, je peux parcourir it $ menu, à partir du modèle, pour construire le menu. Et je peux comparer les articles avec $ courant, pour déterminer si je devrais placer une classe "en cours" sur le < lili de l'article de menu >.

L'exemple de fool.com que vous donnez est un peu plus compliqué, car il est à deux niveaux. Dans ce cas, vous voudrez probablement générer votre arbre de menu à partir d'une base de données, en utilisant peut-être le support de jeu imbriqué de Propel.

+0

Cela a beaucoup de sens, je me demandais juste s'il me manquait quelque chose ou non. – Failpunk