Yii Framework Custom CGridView attribute

alfa6661
- February 09, 2013
0 (0 votes)
Rate :
Membuat custom attribute pada CGridView Yii Framework

Pada artikel ini akan menjelaskan mengenai pembuatan atribut kostum pada CGridView. Sebagai contoh, kita akan membuat atribut kustom untuk menyimpan data nama lengkap yang di ambil dari hasil penggabungan antara nama depan dan nama belakang.

Langkah pertama buat variabel public untuk menyimpan data nama lengkap pada model.

Model

class Person extends CActiveRecord
{
 
    public $full_name;
    ...
 
    public function search()
    {
        $criteria=new CDbCriteria;
        $criteria->select=array(
            "*", 
            "CONCAT(first_name, ' ', last_name) AS full_name"
        );
        ....
    }
 
}

View

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'person-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'first_name',
        'last_name',
        'full_name',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

Sampai pada tahap ini anda sudah dapat menampilkan data nama lengkap pada cgridview. Akan tetapi field nama lengkap tersebut belum bisa melakukan filter atau pun sorting. Agar field nama lengkap dapat di filter dan di sorting, tambahkan baris kode di bawah ini pada model person.

  1. Tambahkan variabel full_name pada rules safe.
    array('first_name, last_name, gender, full_name', 'safe', 'on'=>'search'),
    
  2. Selanjutnya pada method search() tambahkan baris kode berikut ini.
    $criteria->compare("CONCAT(first_name, ' ', last_name)", $this->full_name, true);
    .....
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'sort' => array(
            'attributes' => array(
                '*',
                'full_name'=>array(
                    'asc' => "CONCAT(first_name, ' ', last_name)", 
                    'desc' => "CONCAT(first_name, ' ', last_name) DESC"
                )
            )
        ),
    ));
    

Kode Lengkap nya akan terlihat seperti ini.

public function search()
{
    $criteria=new CDbCriteria;
    $criteria->select=array(
        "*", 
        "CONCAT(first_name, ' ', last_name) AS full_name"
    );
    $criteria->compare("CONCAT(first_name,' ',last_name)",$this->full_name,true);
    $criteria->compare('first_name',$this->first_name,true);
    $criteria->compare('last_name',$this->last_name,true);
    $criteria->compare('gender',$this->gender);
 
    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'sort' => array(
            'attributes' => array(
                '*',
                'full_name'=>array(
                     'asc' => "CONCAT(first_name, ' ', last_name)", 
                    'desc' => "CONCAT(first_name, ' ', last_name) DESC"
                )
            )
        ),
    ));
}

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter

– Eric S. Raymond

Have a better explanation?

If you have comments about this post. Please write your comments below

No comments associated with this article