mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-11 10:37:00 +01:00
73 lines
2.5 KiB
Plaintext
73 lines
2.5 KiB
Plaintext
Erfassen tabellarischer Eingaben
|
|
================================
|
|
|
|
Manchmal wollen wir eine ganze Reihe von Benutzereingaben erfassen, d.h. der Benutzer
|
|
kann Informationen für mehrere Model-Instanzen auf einmal eingeben und
|
|
abschicken. Wir nennen dies *tabellarische Eingabe*, weil die Eingabefelder oft
|
|
als HTML-Tabelle dargestellt werden.
|
|
|
|
Um mit tabellarischen Eingaben zu arbeiten, müssen wir zuerst ein Array mit
|
|
Model-Instanzen erstellen oder befüllen, je nachdem, ob wir Daten einfügen oder
|
|
aktualisieren wollen. Dann beziehen wir die vom Benutzer eingegebenen Daten
|
|
von der `$_POST`-Variable und ordnen sie den einzelnen Model-Instanzen zu.
|
|
Im Unterschied zum Vorgehen bei einer einzelnen Model-Instanz, beziehen wir
|
|
die Daten mit `$_POST['ModelClass'][$i]` statt `$_POST['ModelClass']`.
|
|
|
|
~~~
|
|
[php]
|
|
public function actionBatchUpdate()
|
|
{
|
|
// Zu aktualisierende Datensätze abfragen
|
|
// Es wird davon ausgegangen, dass jeder Datensatz vom
|
|
// Typ 'Item' ist
|
|
$items=$this->getItemsToUpdate();
|
|
if(isset($_POST['Item']))
|
|
{
|
|
$valid=true;
|
|
foreach($items as $i=>$item)
|
|
{
|
|
if(isset($_POST['Item'][$i]))
|
|
$item->attributes=$_POST['Item'][$i];
|
|
$valid=$valid && $item->validate();
|
|
}
|
|
if($valid) // alle Daten sind gültig
|
|
// ...Tu hier etwas
|
|
}
|
|
// Zeigt den View an und erfasst tabellarische Eingabe
|
|
$this->render('batchUpdate',array('items'=>$items));
|
|
}
|
|
~~~
|
|
|
|
Nachdem die Action bereit steht, müssen wir am View `batchUpdate`
|
|
arbeiten, um die Eingabefelder in einer HTML-Tabelle anzuzeigen.
|
|
|
|
~~~
|
|
[php]
|
|
<div class="yiiForm">
|
|
<?php echo CHtml::beginForm(); ?>
|
|
<table>
|
|
<tr><th>Name</th><th>Preis</th><th>Anzahl</th><th>Beschreibung</th></tr>
|
|
<?php foreach($items as $i=>$item): ?>
|
|
<tr>
|
|
<td><?php echo CHtml::activeTextField($item,"[$i]name"); ?></td>
|
|
<td><?php echo CHtml::activeTextField($item,"[$i]price"); ?></td>
|
|
<td><?php echo CHtml::activeTextField($item,"[$i]count"); ?></td>
|
|
<td><?php echo CHtml::activeTextArea($item,"[$i]description"); ?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</table>
|
|
|
|
<?php echo CHtml::submitButton('Speichern'); ?>
|
|
<?php echo CHtml::endForm(); ?>
|
|
</div><!-- yiiForm -->
|
|
~~~
|
|
|
|
Beachten Sie, dass wir beim Aufruf von [CHtml::activeTextField]
|
|
`"[$i]name"` statt `"name"` als zweiten Parameter benutzen.
|
|
|
|
Falls ein Fehler bei der Gültigkeitsprüfung auftritt, werden die entsprechenden
|
|
Eingabefelder automatisch hervorgehoben, wie bereits bei der Einzeleingabe für
|
|
ein Model beschrieben.
|
|
|
|
<div class="revision">$Id: form.table.txt 1389 2009-09-04 14:03:35Z istvan.beregszaszi $</div>
|