Symfony: Automatiser la navigation dans votre admin-generator

accessories-text-editor Petite reprise d’activité du blog après quelques journée assez chargées. Et me voilà vous proposer une pré alpha d’un petit snippet pour symfony 1.2 qui vise à automatiser la génération d’un menu pour l’admin générator qui malheureusement ne propose rien de semblable à l’heure actuelle.
Et combien il devient vite barbant de rajouter les liens de vos nouveaux modules à la main dans votre layout.

Voici donc une solution possible et facile à mettre en place en se basant sur le fichier de routing.

En effet, à chaque ajout de module d’admin via la célèbre:

php symfony propel:generate-admin backend MonModel

Le fichier de routing.yml de l’application en question est modifié avec quelque chose qui ressemble à ça par défaut:

offres:
  class: sfPropelRouteCollection
  options:
    model:               Offres
    module:              offres
    prefix_path:         offres
    column:              oid
    with_wildcard_routes: true

J’ai donc fait un petit snippet qui parse ce yml:

class myAdminMenu 
{
  public static function getLinks()
  {
    $array = sfYaml::load(sfConfig::get('sf_app_config_dir').'/routing.yml');
    $links = array();
    foreach ($array as $k => $v)
    {
      // On n'affiche pas les infos présentes par défaut dans le routing
      if ($k != 'homepage' && $k != 'default' && $k != 'default_index')
      {
        $links[] = $k;
      }
    }
    sort($links,SORT_STRING); // On trie par ordre alphabétique
 
    return $links;
  }
}

Et il ne reste plus qu’à boucler dessus dans votre layout.php:

<ul id="menu">
  	<?php foreach (myAdminMenu::getLinks() as $link): ?>
  		<li><a href="<?php echo url_for($link.'/index') ?>"><?php echo ucfirst($link) ?></a></li>
  	<?php endforeach; ?>
</ul>

Bon j’imagine bien qu’il est perfectible au possible surtout si on configure un nom différent du module à la génération du module mais on fera avancer les choses quand le besoin s’en fera sentir.

Tags: , , ,

A propos de l'auteur

Développeur web spécialisé Symfony, il est avant tout passionné de web tout simplement. Il aime les défis et farfouiller dans le code de Symfony ou Doctrine. Fondateur du blog, il exerce chez Autrement.

Vous avez aimé ce billet? Faites le savoir!

  • Delicious
  • Twitter
  • Technorati Favorites
  • FriendFeed
  • Google Bookmarks
  • Share

2 Réponses

  1. xever 5 juin 2009 à 7 h 58 min #

    salut, je suis en train de regarder pour faire un menu au dynamique à partir de routes. Ce que tu montres là est bien intéressant.

    Mais as-tu une idée pour intégrer la vérification des droits sur les actions que tu mets dans le menu. L’idée est de reprendre la configuration de l’action (security.yml) ?

  2. Tim 5 juin 2009 à 13 h 50 min #

    hello,

    Si j’ai bien saisi ta question, le principe serait de n’afficher qu’un menu avec les items que l’utilisateur courant peut afficher avec ses droits?

    Personnellement je le verrais ainsi:
    - A partir du routing.yml on crée des objets sfAction
    - Pour chaque objet sfAction, avant de l’afficher on vérifie les droits qu’il demande via sfAction::getCredential et on les compare aux credentials de l’utilisateur courant

    Ca parait jouable, mais à voir ce que ca donne en terme de performation, car je ne sais pas si la création d’un objet sfAction est très couteux.


Laisser un message