Je m'y suis remis, mais difficilement.
Une nouvelle version pour test.
Vous pouvez utiliser avec
shema.yml
fixatures
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 namedata: columns: nom: string(50) prenom: string(50) data1: string(50) verify: boolean date: date num: integer
La déclaration de l'objet liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 namedata: <?php for($i=0; $i<100; $i++): ?> name<?php echo $i ?>: nom: nom<?php echo $i . "\n"?> prenom: prenom<?php echo 1000 - $i . "\n"?> data1: <?php echo md5(rand(1, 999999)) ."\n"?> verify: <?php echo $i % 3 == 0 ? true : false ?><?php echo "\n" ?> date: '<?php echo '2010-' . rand(1,12) . '-' . rand(1,28) ?>' num: <?php echo rand(1,99999) ?><?php echo "\n" ?> <?php endfor; ?>
/lib/list/doctrine/testList.class.php
Le contrôleur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 class TestList extends mrList { public function configure() { $querry = Doctrine_Query::create()-> from( 'namedata' ); $this->setFilterObjectName('namedataFormFilter'); $this->setReturnRoute( '@coucou' ); // Route of the list form $this->setQuery( $querry ); $this->setWidget( 'nom', new mrListWidgetFieldString( array( 'title' => 'Nom', 'sortable' => true, 'linkedRoute' => '@namedata_show', 'linkedField' => 'id' ), array( ) ) ); $this->setWidget( 'prenom', new mrListWidgetFieldString( array( 'title' => 'Prénom', 'sortable' => true ), array( ) ) ); $this->setWidget( 'data1', new mrListWidgetFieldString( array( 'title' => 'Donnée' ), array( ) ) ); $this->setSortDefault( 'nom', 'ASC' ); } }
Le template
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public function executeIndex( sfWebRequest $request ) { $this->test = new TestList(); $this->test->setWebRequestAndBind($request); }
La route (si votre module s'appelle test et l'action par défaut)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php use_stylesheet( 'mrList') ?> <h1>essai</h1> <?php echo $test->render() ?>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7coucou: url: /test options: with_wildcard_routes: true param: module: test
Le filtre marche, les tris aussi.
Il reste :
- permettre de définir et de renvoyer les boutons (rapide)
- de rendre des boutons conditionnelles (certains enregistrement pourraient ne pas être modifiables)(rapide)
- de rendre les objets full i18n ready (rapide)
- mettre en place des boutons pour un traitement de lot avec des cases à cocher (moyen)
- mettre un peu de JS sur la liste pour certains traitements. (moyen)
- permettre avec du JS de ne recharger que le centre de la liste en cas de tri et filtre (loin)
- mettre les tests en place (évolutif)
Je ne sais pas trop comment je vais mettre en place le système de bouton. Pour l'instant j'envisage un container a part des widget avec le même principe de déclaration. Mais cela pourrait être dans le même que les widgets avec un paramètre qui indique que c'est un bouton... mais j'aime moins.
Reste à savoir comment faire passer les données de l'enregistrement à chaque bouton pour qu'il puisse décider s'il doit s'afficher et vers quel url il doit renvoyer l'information.
Pas grand chose, mais j'ai gardé pour la fin le plus difficile je crois.
Partager