Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] cases à cocher dans une liste

Posted by zolz on 09/15/2008 19:46

Bonjour,

J'utilise un controleur jControllerDaoCrud selon le tuto http://jelix.org/articles/tutoriels/crud-jform-dao et c'est OK.

Je peux modifier les fiches avec le template edit mais je souhaiterais pouvoir éditer plusieurs fiches en même temps : J'ai une liste de personnes qui empruntent des livres et à chaque retour de dois passer sur chaque fiche pour valider le retour. C'est long donc j'aimerais pouvoir cocher dans le template list un certain nombre de personnes et cliquer sur un bouton action qui ferait la validation sur toutes ces personnes en une seule fois.

Le Dao ne me pose pas de soucis mais le form si.

J'essaye de mettre des cases à cocher dans le template list mais sans succès jusqu'ici :

  • Je ne sais pas quoi mettre dans la method recup_cases pour obtenir les member_sel.
  • J'ai essayé d'utiliser le jForm de la méthode index en la surchargeant mais je ne sais pas définir le fichier .form.xml. J'ai essayé ceci mais cela me donne des erreurs lors de la validation par JS. Est-il possible de désactivé cette validation ? Dans la doc, j'ai trouvé comment ajouter des controls mais pas comment les supprimer.
 <checkbox ref="member_sel[]">
 <label></label>
 </checkbox>

Un extrait de mon fichier list.tpl :

 <form action="{jurl 'chat~default:recup_cases'}" method="post">
 <table border="1">
   {foreach $list as $record}
     <tr>
     <td>
 <input type="checkbox" name="member_sel[]" value="$record->pk"/>
     </td>
     <td>{$record->nom|eschtml}</td>
     <td>{$record->prenom|eschtml}</td>
     <td>
         <a href="{jurl $viewAction,   array('id'=>$record->pk)}">voir</a>
 <input type="checkbox" name="member_sel" value="3"/>

Je vous remercie. Zolz.

  [Opened] Re: cases à cocher dans une liste

Reply #1 Posted by laurentj on 09/16/2008 09:55

Salut,

Quand tu as plusieurs checkbox pour un même type d'information, c'est <checkboxes> et non pas <checkbox>..

Maintenant, pour ton cas plus précis, je pense qu'il faut que tu fasse ton formulaire dans la liste, à la main. Voir peut-être même faire ton propre controleur crud. Je ne sais pas trop.

  [Opened] Re: cases à cocher dans une liste

Reply #2 Posted by zolz on 09/16/2008 22:14

Bonsoir,

Merci pour la réponse. Ca marche.

J'ai fait le formulaire à la main et j'ai trouvé comment récupérer la variable member_sel grâce au post sur AJAX : http://www.jelix.org/forums/read.php?5,2908

Il faut récupérer $this->param('member_sel').

Voici ce que j'ai fait :

1. Dans le contrôleur, j'ai surchargé la méthode index de "jControllerDaoCrud.class.php" pour créer une nouvelle action. J'ai juste ajouté cette ligne :

 $tpl->assign('editList' , $this->_getAction('editlist'));

J'ai essayé de surchargé _index($resp, $tpl) avec la ligne précédente mais cela ne marche pas :

 Fatal error: Call to a member function getBuilder() on a non-object soit :
 $t->_privateVars['__formbuilder'] = t ->_privateVars['__form']->getBuilder('html',  $t->_vars['editList'],array());

Une idée ?

2. La créé l'action suivante dans le contrôleur :

 function editlist(){
        $adherents = $this->param('member_sel');
        if ($adherents) {
                $dao = jDao::get($this->dao, $this->dbProfil);
                foreach ($adherents as $adherent) {
                        $record = $dao->get($adherent);
                        $record->date_retour = date('Y-m-d');
                        $dao->update($record);
                }
        }
        $rep = $this->getResponse('redirect');
        $rep->action = $this->_getAction('index');
        return $rep;
 }

3. Le template est le même que dans le premier post à l'exception de la première ligne remplacée par {form $form, $editList} et l'ajout du {/form} correspondant.

Voila.

Juste une petite remarque : est il possible de remplacer le foreach dans le point 2 par quelque chose qui ferait la requete suivante :

 update table set date_retour='2009-08-21' where id_adh in (3,4,5);

Merci.

 
Page
  1. cases à cocher dans une liste