Files
yii/docs/guide/uk/form.table.txt
2012-02-13 01:03:01 +00:00

59 lines
3.5 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>