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;
}
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.
Commentaires
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.