Files
yii/docs/guide/ru/form.table.txt
2011-01-16 14:55:27 +00:00

68 lines
3.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Обработка табличного ввода
==========================
Бывает, что иногда требуется обработать данные, вводимые пользователем, в пакетном режиме. Иначе говоря,
случаются ситуации, когда пользователь вводит данные для множества экземпляров модели и отправляет их
на сервер все разом. Будем называть это табличным вводом (tabular input), поскольку поля ввода, как
правило, организованы в виде таблицы.
Для работы с табличным вводом нам в первую очередь понадобится создать или заполнить массив, состоящий
из экземпляров модели данных, в зависимости от того, добавляем мы данные или обновляем. Затем мы извлекаем
данные из переменной `$_POST` и присваиваем их каждой модели. В отличие от ввода данных для одной модели,
здесь используется `$_POST['ModelClass'][$i]` вместо `$_POST['ModelClass']`.
~~~
[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=$item->validate() && $valid;
}
if($valid) // все элементы корректны
// …некоторая обработка
}
// отображаем представление с формой для ввода табличных данных
$this->render('batchUpdate',array('items'=>$items));
}
~~~
Когда действие готово, необходимо написать представление `batchUpdate` таким образом, чтобы
отобразить все необходимые поля ввода в HTML таблице.
~~~
[php]
<div class="form">
<?php echo CHtml::beginForm(); ?>
<table>
<tr><th>Имя</th><th>Стоимость</th><th>Количество</th><th>Описание</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('Сохранить'); ?>
<?php echo CHtml::endForm(); ?>
</div><!-- form -->
~~~
Обратите внимание, что выше мы используем `"[$i]name"` вместо `"name"` в
качестве второго параметра при вызове метода [CHtml::activeTextField].
В случае, если возникают ошибки валидации, соответствующие поля ввода будут подсвечены автоматически,
как и в случае работы с одной моделью, рассмотренной ранее.
<div class="revision">$Id: form.table.txt 2783 2010-12-28 16:20:41Z qiang.xue $</div>