№19 Dars - Yiida ketma ket ma`lumotlar kiritishni qayta ishlash.

Ba`zan bizda ma`lum qoidalar bo`yicha foydalanuvchi tomonidan kiritilayotgan ma`lumotlarni qayta ishlash talab qilinishi mumkin. Tabular input deb, mal`umot kirituvchi bir qancha maydonlarni bir jadvalga qoida bo`yicha joylashga aytiladi. Jadvalli kiritish bilan ishlashimiz uchun birinchi navbatda bizdan ma`lumotlarni qo`shishimiz yoki o`zgartirishimizga qarab modellar ma`lumotlaridan tashkil topgan massiv nusxasini yaratish yoki to`ldirish talab etiladi. So`ng biz $_POST o`zgaruvchisidan ma`lumotlarni olib xar bir modelga o`zlashtiramiz. Bir model uchun ma`lumotlarni kiritishdan farqli o`laroq bu yerda $_POST['ModelClass'] o`rniga $_POST['ModelClass'][$i] dan foydalanishimiz mumkin.

public function actionBatchUpdate()
{
    $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)  // barcha elementlar mavjud
            // …bir qancha ishlar
    }
    // jadvalli kirituvchi ma`lumotlar uchun form orqali view da aks ettirish 
    $this->render('batchUpdate',array('items'=>$items));
}

Qachon action tayyor holga kelsa, keraklima`lumotlarni HTML jadvalidagi kirituvchi maydonlarda ko`rish uchun batchUpdate view ini quyidagicha holatda hosil qilishimiz kerak bo`ladi.

<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 -->

Yuqorida biz CHtml::activeTextField metodiga murojaat paytida xaqiqiy parametr bo`lmish "name" o`rniga "[$i]name" dan foydalandik. Agarda tekshiruv paytida xatolik ro`y bersa va bir model bilan ishlangan bo`lsa unda xatolikka mos maydonlar yorqinlashadi.

Manba:


JONNY

Muallif haqida

JONNY Arduino, Java, C#, Android, Windows, Linux, Debian, Javascript.


Blogdagi so‘nggi maqolalar:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!