Yii (aloqalar) ma'lumotlar bazasi jadvali asosida dinamik ravishda HTML jadvalini yaratish kerakmi?

Jadvaldagi ustunlar va jadval ma'lumotlarining o'ziga berilgan "ko'rinish" yoki HTML jadvalini tuzadigan funktsiyani yaratishga harakat qilaman. Bu Yii da renderPartial usuli bilan chaqirilgan sahifa bo'ladi. Men buni shunday qilishni tasavvur qildim (psevdo-kod yordamida ko'rsataman):

    void view(array $cols, array $tabledata) 
    {
    //$tabledata will be an array of CActiveRecord objects. $cols is an array of strings from getColumnNames().
    <table><thead><tr>
    foreach($cols as $col)
    {
        <th>$col</th>
    }
    </tr></thead><tbody>
    foreach($tabledata as $data)
    {
        <tr>
        foreach($cols as $col)
        {
            <td>$data->$col</td>
        }
        </tr>
    }
    </tbody></table>
    }

Biroq, men duch keladigan muammo shundaki, men munosabatlar uchun ustunlarni ololmayman. Men http://www.yiiframework.com/doc/api/1.1/CDbTableSchemani topdim. a> lekin bu sizga faqat ma'lum bir jadval uchun ustun nomlarini beradi. Menga HTML jadvalini yaratish uchun munosabatlar ishlatilganda ishlatiladigan barcha ustunlarni olish usuli kerak. Shu bilan bir qatorda, kimdir buni qilishning yaxshiroq usuliga ega bo'lsa, menga xabar bering. Rahmat!

Tahrirlash: Eslatma sifatida, men CGridView-dan foydalanmasligimning sababi, shu jumladan quyida sanab o'tganim, ustunlar yoki ma'lumotlar nima ekanligini bilishni xohlamayman. Men faqat kod yordamida jadval yaratishni xohlayman.


person Prateek    schedule 18.05.2012    source manba


Javoblar (2)


Bunday funktsiyani yaratishning hojati yo'q. CGridView siz qidirayotgan narsadir. U ma'lumotlarni html jadvali sifatida ko'rsatadi. Quyida namunaviy kod keltirilgan.

<?php $this->widget('zii.widgets.grid.CGridView', array(
        'dataProvider' => new CArrayDataProvider($tabledata),
        'columns' => array(
         //specify the colums you wanted here
        ),
    ));
?>
person dInGd0nG    schedule 18.05.2012
comment
Men foydalanishim kerak bo'lgan, CGridView bilan birgalikda ishlatib bo'lmaydigan maxsus funktsiyalar mavjudligini ko'rsatishim kerak edi. - person Prateek; 18.05.2012
comment
Jadval yaratish mantig'i ichidagi funktsiyani nazarda tutasizmi? Bunday holda siz CGridView-ni osongina kengaytirishingiz va renderTableRow(), renderTableHeader() va hokazolarni bekor qilishingiz mumkin. - person dInGd0nG; 18.05.2012
comment
Va agar siz tegishli ustunlarni xohlasangiz, CActiveRecord ning getRelated() funksiyasiga qo'ng'iroq qilishingiz mumkin - person dInGd0nG; 18.05.2012
comment
Muayyan masala shundaki, men munosabatlar orqali olingan ko'p sonli ustunlar bo'yicha filtr va saralashdan foydalanishim kerak. CGridView buni qilishning oson usulini taklif qilmaydi. - person Prateek; 18.05.2012
comment
Muammo shundaki, menda saralanishi va filtrlanishi kerak bo'lgan bir yoki ikkita ustundan ko'proq narsa bor. Modelni o'rnatilgan usullardan foydalangan holda saralash va filtrlash uchun ko'plab qo'shimchalar talab qilinadi. Buning uchun jQuery plaginidan foydalanishni tanladim. Men CGridView dan foydalanmaslikni tanladim, chunki men tashqi plagindan foydalanardim. - person Prateek; 18.05.2012

Buni qanday qilishni o'rganmoqchi bo'lgan har bir kishi uchun men qanday qilib yechim topdim:

--Model--
//Attributes:
$name;
$age;
$data;

--Controller--
//Controller stuff
public function actionShow()
{
  $this->render('show',array('model'=>loadModel(1)));
}

--view--
//traditonal way
echo CHtml::encode($model->getAttributeLabel('name');
echo CHtml::encode($model->name);
echo CHtml::encode($model->getAttributeLabel('age');
echo CHtml::encode($model->age);
echo CHtml::encode($model->getAttributeLabel('data');
echo CHtml::encode($model->data);

//one function way
foreach ($model->attributes as $col=>$val)
{
  CHtml::encode($model->getAttributeLabel($col);
  CHtml::encode($val);
}

Agar kimdir sinab ko'rmoqchi bo'lsa, men qidirgan narsam shu edi.

person Prateek    schedule 30.05.2012