Pada artikel ini akan menjelaskan mengenai pembuatan attribute custom pada CGridView di Yii Framework. 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.
- Tambahkan variabel full_name pada rules safe.
array('first_name, last_name, gender, full_name', 'safe', 'on'=>'search'),
- 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"
)
)
),
));
}
No Comments
Leave a comment Cancel