1 pièce(s) jointe(s)
[mrList] version alpha 0.1.4 pour test
Je m'y suis remis, mais difficilement.
Une nouvelle version pour test.
Vous pouvez utiliser avec
shema.yml
Code:
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 |
fixatures
Code:
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; ?> |
La déclaration de l'objet liste
/lib/list/doctrine/testList.class.php
Code:
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 contrôleur
Code:
1 2 3 4 5 6
|
public function executeIndex( sfWebRequest $request )
{
$this->test = new TestList();
$this->test->setWebRequestAndBind($request);
} |
Le template
Code:
1 2 3 4
|
<?php use_stylesheet( 'mrList') ?>
<h1>essai</h1>
<?php echo $test->render() ?> |
La route (si votre module s'appelle test et l'action par défaut)
Code:
1 2 3 4 5 6 7
|
coucou:
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.