Bonjour,
je n'arrive pas trouver comment dans un module admin récuperer les données du filtre pour créer une action qui me listerai les data pour une impression ou un sauvegarde dans un fichier ?
Version imprimable
Bonjour,
je n'arrive pas trouver comment dans un module admin récuperer les données du filtre pour créer une action qui me listerai les data pour une impression ou un sauvegarde dans un fichier ?
Les données du filtre de l'admin gen' sont contenues dans le sfUser :
Il faut que ton filtre aie été appliqué (non-vide? -->pas complètement sûr) au moins une fois.Code:
1
2 attributeHolder: admin_module: nomDuModule.filters {...}
Tu devrais pouvoir les voir dans la debug toolbar.
Essaye voir ça :
Code:
1
2 $filterArray = $this->getUser()->getAttribute('nomDuModule.filters'); print_r($filterArray);
Juste pour plussoir sur Nico.
Quant tu récupères tu vérifies si le paramètre existe, si non tu utilise un array vierge.
Tu as intérêt à instancier ton filter qui a une méthode qui permet de récupérer le même query que celui utilisé par la liste de l'admin. Tu est ainsi sur d'avoir la même chose et tu n'as pas à te "peller les doigts" pour recréer une requête à l'identique.
Regarde dans le cache le code générer pour ton form d'admin, cela devrait te donner des idées..
je comprend pas trop.
en faite dans mon fichier generator j'ai:
je voudrait pouvoir dans l'action listing, récuperer, ou bien l'ensemble des object, ou bien les paramètres du filtresCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 config: actions: ~ fields: ~ list: display: [group, value] object_actions: _edit: ~ actions: listing: ~ max_per_page: 10 filter: display: [site,groupasset_id, value, actif] form: ~ edit: ~ new: ~
EDIT:
en farfouillant j'ai trouver comment récupérer les valeurs des filtres:
me donne bien la liste des champs du filtre.Code:
1
2
3
4
5 public function executeListListing(sfWebRequest $request) { var_dump($this->getFilters()); }
j'ai essaye de continuer avec ce que j'ai trouvé dans le cache:
malheureusement, je me retrouve avec un _csrf required au niveau du bind.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 public function executeListListing(sfWebRequest $request) { $this->filters = $this->configuration->getFilterForm($this->getFilters()); $this->filters->bind($request->getParameter($this->filters->getName())); if ($this->filters->isValid()) { var_dump($this->filters->getValues()); } }
Quelqu'un a une idée ?
Et ?Citation:
malheureusement, je me retrouve avec un _csrf required au niveau du bind
bein ça plante ;)
J'ai essayer une autre méthode, j'ai récupérer toute l'action index depuis le cache que j'ai mis dans mon action ListListing de même pour le fichier indexSuccess que j'ai recopié dans listListingSuccess.
ça me conserve bien le filtre.
J'ai nettoyé le fichier du bloc de filtre et des actions mais je n'arrive pas a supprimer la pagination
mon action:
la partie intéressante du template:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public function executeListListing(sfWebrequest $request) { // sorting if ($request->getParameter('sort') && $this->isValidSortColumn($request->getParameter('sort'))) { $this->setSort(array($request->getParameter('sort'), $request->getParameter('sort_type'))); } // pager if ($request->getParameter('page')) { $this->setPage($request->getParameter('page')); } $this->pager = $this->getPager(); $this->sort = $this->getSort(); }
et la partie du partialCode:
1
2
3
4
5
6 <div id="sf_admin_content"> <form action="<?php echo url_for('pabx_collection', array('action' => 'batch')) ?>" method="post"> <?php include_partial('pabx/listing', array('pager' => $pager, 'sort' => $sort, 'helper' => $helper)) ?> </form> </div>
comment outrepassé le pager ou alors le modifié à la volée pour qu'il affiche tout les enregistrements ?Code:
1
2
3
4
5
6
7
8 <tbody> <?php foreach ($pager->getResults() as $i => $pabx): $odd = fmod(++$i, 2) ? 'odd' : 'even' ?> <tr class="sf_admin_row <?php echo $odd ?>"> <?php include_partial('pabx/list_td_tabular', array('pabx' => $pabx)) ?> </tr> <?php endforeach; ?> </tbody>
Suis pas bon ces derniers jours.
Mais, si je repart à la question d'origine :
- les données du filtre sont stockée dans un tableau dans l'objet user. Tu peux donc facilement les récupérer.
- a partir de ces données et d'une instance de l'objet filtre tu peux simplement récupérer le query doctrine qui récupèrera tes données.
Je ne vois pas ce qu'un objet pager viendrait faire ici.
bein justement rien, je veut juste tout les enregistrements.
dans fichier generator.yml:
et si dans fichier actionCode:
1
2
3
4
5
6
7
8
9
10 config: actions: ~ fields: ~ list: display: [group, value] object_actions: _edit: ~ actions: listing: ~ max_per_page: 10
je met
il n'affiche rien.Code:
1
2
3
4
5
6 public function executeListListing{ $filterArray = $this->getUser()->getAttribute('nomDuModule.filters'); print_r($filterArray); }
J'ai donc eu l'idée de recopier les fichiers autogénéré et de supprimer ce qui m'interressait pas, sauf que je bute au niveau du pager.
Essaye de générer un simple crud...
Tu auras alors tous les enregistrements.
L'auto-généré n'est pas réellement conçu pour être torturé ce cette façon. Surtout au niveau de la génération de l'index.
heuuu je veut tout les enregistrements suivant le filtre appliqué ;)
c'est juste la pagination que je voudrait supprimmer
j'ai bien trouver la méthode pour récupérer les valeurs du filtre:
j'ai donc instancié un objet filter avec ces valeurs:Code:$this->getFilters()
ce que je ne trouve pas c'est comment récupérer la query doctrine qui récupérera mes données !!Code:
1
2 $this->filters= new nomdumoduleFormFilter($this->getFilters();