mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-06 08:14:21 +01:00
74 lines
3.0 KiB
Plaintext
74 lines
3.0 KiB
Plaintext
HTMLテーブル式入力の収集
|
|
========================
|
|
|
|
私達はユーザーの入力をバッチモードとして束にして集めたいと思う事
|
|
が良くあります。複数モデルのインスタンスの情報を、ユーザーが一度に送信できる
|
|
様にする場合です。こういった場合の入力フィールドは、往々にしてHTMLテーブル
|
|
で提供されるので、ここではこれを *HTMLテーブル式入力* (tabular input)
|
|
と呼びます。
|
|
|
|
HTMLテーブル式入力 では、まず初めに、データをインサートするか
|
|
アップデートするかに従って、モデルインスタンスの為の配列を作成するか、
|
|
(アップデートの際は)データの入った状態にします。その後、
|
|
ユーザの入力したデータを `$_POST` 変数から回収し、
|
|
それぞれのモデルへ割り当てます。シングルモデルの場合とのわずかな違いは、
|
|
入力データの回収の為に、`$_POST['ModelClass']` の代わりに
|
|
`$_POST['ModelClass'][$i]` を用いる点です。
|
|
|
|
~~~
|
|
[php]
|
|
public function actionBatchUpdate()
|
|
{
|
|
// 一括でアップデートをする為にアイテムを回収します。
|
|
// 各アイテムが 'Item' モデルクラス だと仮定します。
|
|
$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) // 全てのアイテムが検証を通る際に
|
|
// 処理する内容をここに…
|
|
}
|
|
// HTMLテーブル式入力 をバッチ(一纏め)で回収する為のビューを表示
|
|
$this->render('batchUpdate',array('items'=>$items));
|
|
}
|
|
~~~
|
|
|
|
アクションが準備されたら、HTMLテーブルとして入力フィールドを表示する為の
|
|
`batchUpdate` ビューの作成に取り掛かる必要があります。
|
|
|
|
~~~
|
|
[php]
|
|
<div class="yiiForm">
|
|
<?php echo CHtml::beginForm(); ?>
|
|
<table>
|
|
<tr><th>Name</th><th>Price</th><th>Count</th><th>Description</th></tr>
|
|
<?php foreach($items as $i=>$item): ?>
|
|
<tr>
|
|
<td><?php echo CHtml::activeTextField($item,"name[$i]"); ?></td>
|
|
<td><?php echo CHtml::activeTextField($item,"price[$i]"); ?></td>
|
|
<td><?php echo CHtml::activeTextField($item,"count[$i]"); ?></td>
|
|
<td><?php echo CHtml::activeTextArea($item,"description[$i]"); ?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
</table>
|
|
|
|
<?php echo CHtml::submitButton('Save'); ?>
|
|
<?php echo CHtml::endForm(); ?>
|
|
</div><!-- yiiForm -->
|
|
~~~
|
|
|
|
上記では、[CHtml::activeTextField] がコールされた際の二番目のパラメータ
|
|
として、`"name"` の代わりに `"name[$i]"` を使用している事
|
|
に注意してください。
|
|
|
|
もし何か検証にエラーがある場合は、シングルモデルでの入力の際
|
|
に述べたのと同様に、結びついた入力フィールドが自動的にハイライトされます。
|
|
|
|
<div class="revision">$Id: form.table.txt 857 2009-01-04 20:57:35Z qiang.xue $</div>
|