yii: CGridView

Шпаргалка касаемо CGridView в yii

CActiveDataProvider

// модель для фильтрации текущего дата-провайдера
$filter = new Role();
$filter->unsetAttributes();
if(isset($_GET['Role'])){
    $filter->attributes = $_GET['Role'];
}

// Сама фильтрация
$criteria=new CDbCriteria;
$criteria->compare('rid',$filter->rid);

// Сортировка
$sort = new CSort();
$sort->defaultOrder = 'name'; // по умолчанию
$sort->attributes = array(
    'rid',
    // Если надо усложнить сортировку
    'name'=>array(
        'asc'=>'name',
        'desc'=>'name desc',
    ),
);

$DataProvider = new CActiveDataProvider(Role::model(), array(
    'criteria'=>$criteria,
    'sort'=>$sort,
    'pagination'=>array(
        'pageSize'=>20,
    ),
));

$this->render('greed', array(
    'DataProvider' => $DataProvider,
    'filter' => $filter
));

Вьюха «greed»:

/**
 * @var CActiveDataProvider $DataProvider
 * @var Role $filter
 */

/** @var CSort $sort */
$sort = $DataProvider->getSort();
echo $sort->link('rid', 'По коду'); // Выводим ссылку на сортировку

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'id-greed',
    'dataProvider' => $DataProvider,
    'filter' => $filter,
    'columns' => array(
        array(
            'class'=> 'CCheckBoxColumn', // колонка в виде чекбокса
            'id'=>'active',
            // если хотим что бы имя отличалось от id:
            'checkBoxHtmlOptions'=> array('name'=> 'select_item[]'),
            'selectableRows' => 2, // Выделение нескольких строк
        ),
        array(
            'name' => 'rid',
            'header' => 'ID',
            'htmlOptions'=>array("width"=>"50px"), // ширина колонки 50px
        ),
        array(
            'name' => 'name',
            'header' => 'Название',
            'type'=>'raw',
            'value' => 'CHtml::textField("role_name[$data->rid]", $data->name, array("style"=>"width:99%"))',
        ),
    )
));

CSqlDataProviderCArrayDataProvider
Вывод таблицы на основе запроса.
Контроллер:

$sql = 'SELECT rid,name FROM role';
/** @var CDbCommand $raw */
$raw = Yii::app()->db->createCommand($sql);
$count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM (' . $sql . ') as item_count')->queryScalar();

$DataProvider = new CSqlDataProvider($raw, array(
    'keyField' => 'rid',
    'totalItemCount' => $count,
    'sort' => array(
        'attributes' => array('rid','name'),  // поля
        'defaultOrder' => array('rid' => CSort::SORT_ASC), // сортировка по умолчанию
    ),
    'pagination' => array(
        'pageSize' => 10, // элементов на странице
    ),
));

$this->render('greed', array('DataProvider'=>$DataProvider));

Вывод таблицы на основе массива:

$sql = 'SELECT rid,name FROM role';

$row_data = Yii::app()->db->createCommand($sql)->queryAll();
$DataProvider = new CArrayDataProvider($row_data, array(
    'keyField' => 'rid',
    'pagination' => array(
        'pageSize' => 10, // элементов на странице
    ),
));
$this->render('greed', array('DataProvider'=>$DataProvider));

Вьюха «greed»:

/**
 * @var CSqlDataProvider $DataProvider
 */

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'id-greed',
    'dataProvider' => $DataProvider,
    'columns' => array(
        array(
            'name' => 'rid',
            'header' => 'ID',
        ),
        array(
            'name' => 'name',
            'header' => 'Название',
            'value' => '$data["rid"]." - ".$data["name"]'
        )
    )
));

yii: CGridView: 1 комментарий

  1. loans

    I am now not positive where you’re getting your info, but great topic.
    I must spend a while studying much more or working
    out more. Thanks for wonderful information I used to be looking for this info for my mission.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *