MediCoder Aide

Blogues » MediCoder » Do add-edit-delete, and make it mulitple, the easy way
Par mytto20873 points 

Do add-edit-delete, and make it mulitple, the easy way

On a régulièrement besoin d'enregistrer une valeur donnée sur une collection d'objets.

Prenons l'exemple d'une vue qui permet d'annuler des séjours. On construira classiquement un tableau avec un bouton d'annulation à la fin de chaque ligne :

{{foreach from=$sejours item=_sejour}}
... 
 
<form name="Edit-{{$_sejour->_guid}}" action="?" method="post">
 
<input type="hidden" name="m" value="planningOp" />
<input type="hidden" name="dosql" value="do_sejour_aed" />
<input type="hidden" name="sejour_id" value="{{$_sejour->_id}}" />
 
<input type="hidden" name="annule" value="1" />
 
...
 
</form>
 
...
{{/foreach}}

Seulement on aimerait également avoir un bouton pour tout annuler, sans cliquer sur n boutons et encore moins en chainant des requêtes Ajax.

Voici comment transformer un do_aed classique : il suffit d'ajouter un champ dont le nom est celui de la clé avec un s final, et donc la valeur est une sérialisation des identifiants.

<form name="Edit-sejours" action="?" method="post">
 
<input type="hidden" name="m" value="planningOp" />
<input type="hidden" name="dosql" value="do_sejour_aed" />
<input type="hidden" name="sejour_ids" value="{{$sejours|@array_keys|@join:"-"}}" />
 
<input type="hidden" name="annule" value="1" />
 
</form>

On pourra également laissé la valeur en blanc pour la remplir en Javascript, par exemple sur l'état de cases à cocher :

<input type="hidden" name="sejour_ids" value="" />
{{foreach from=$sejours item=_sejour}}
<input class="sejour" type="checkbox" value="{{$_sejour->_id}}" />
{{/foreach}}

et

var sejour_ids = $$('input.sejour:checked').pluck('value');
$V(this.form.sejour_ids, sejour_ids);

Le tout, bien entendu, sans avoir à coder de do_multiple_aed.php spécifique.

Remarque: Les controlleurs multiples fonctionnent également en suppression.

Sponsors privilégiés

Mediboard project