Symfony admin generator — ajouter une colonne booléenne

. lecture : 3 minutes

Vos pages d'administrations sont superbes, générées avec l'admin generator, mais vous voulez y ajouter une colonne de type booléen ? Facile (quand on connait).

Pour afficher une donnée booléenne de votre base de données, il suffit de l'ajouter dans generator.yml :

      list:
        title: Brouillons
        display: [titre, date, autoriser_commentaires]

Vous voulez créer une colonne, selon certains critères ? Touvez lui un nom, puis ajoutez-le à la partie "Fields" du generator :

    config:
      fields:
        has_tags:
          label: "A des étiquettes"
          type: Boolean
    (…)
      list:
        display: [titre, date, has_tags]

Il vous faut bien sur définir cette colonne dans /lib/model/doctrine/Contenu.class.php (par exemple) :

    public function getHasTags()
    {
      $count = Doctrine_Core::getTable('Tagging')
        ->createQuery('c')
        ->where('c.taggable_model = "Contenu"')
        ->andwhere('c.taggable_id = ?', $this->getId())
        ->count();

      if ($count > 0)
        return true;
      else
        return false;
    }

Et hop.
copie d'écran de l'admin de epinardscaramel

Mais, une seconde ! Symfony affiche un check (tick.png) quand c'est vrai, mais rien quand c'est faux ! On ne peut pas ajouter des p'tites croix rouges ? Si, mais ça se complique un peu.

Ne rien afficher pour les valeurs fausses, c'est le comportement normal de symfony. Pour modifier ça, il y a deux possibilités :

Premier cas, vous voulez modifier ça dans un seul module de votre application : Créez un dossier templates dans ce module, créez le fichier _list_field_boolean.php à l'intérieur, et écrivez :

[?php if ($value): ?]
  [?php echo image_tag(sfConfig::get('sf_admin_module_web_dir').'/images/tick.png', array('alt' => __('Checked', array(), 'sf_admin'), 'title' => __('Checked', array(), 'sf_admin'))) ?]
[?php else: ?]
  [?php echo image_tag(sfConfig::get('sf_admin_module_web_dir').'/images/delete.png', array('alt' => __('Unchecked', array(), 'sf_admin'), 'title' => __('Unchecked', array(), 'sf_admin'))) ?]
[?php endif; ?]

Deuxième cas, vous voulez afficher des croix rouges dans plusieurs modules de votre application : Nous allons devoir créer un thème.

Créez les dossiers suivants : data/generator/sfDoctrineModule/monTheme. À l'intérieur, copiez tous les fichiers contenus dans lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/data/generator/sfDoctrineModule/admin/.

Pour chaque module qui doit utiliser le nouveau thème, modifiez à nouveau le generator.yml avec :

generator:
  class: sfDoctrineGenerator
  param:
    model_class:           Contenu
    theme:                 monTheme

Maintenant, les modules utilisent le nouveau thème. Il ne reste plus qu'à modifier le fichier data/generator/sfDoctrineModule/myTheme/template/templates/_list_field_boolean.php, comme indiqué plus haut.

Et hop.
copie d'écran de l'admin de epinardscaramel

Commentaires

1. le 05 juillet 2011 (07 h 59), par Olivier CLEMENCE :

Sympa les explications claires et précises, je ne me suis pas encore lancé dans la création de thème pour l'admin de symfony mais j'y pense.

Sinon, pour ceux que ça intéresse, j'ai également rédiger un petit article concernant l'admin générator de symfony.

L'ajout de commentaires est désactivé.