Kita mungkin ingin menggunakan CGridview dengan data sesuai SQL yang inginkan. Biasanya kita melakukan hal ini karena kita lebih menguasai perintah SQL daripada memahami obyek-obyek yang ada di framework Yii. Berikut akan dijelaskan langkah-langkahnya:
Pada Controller:
Pada contoh ini action untuk admin akan kita gunakan. Oleh itu kita bisa edit seperti contoh berikut ini:
public function actionAdmin()
{
$first_contact=$_GET[‘first_contact’];
$count=Yii::app()->db->createCommand(“SELECT COUNT(*) FROM industry”)->queryScalar();
$sql=”SELECT industry_id, a.industry_name, count(b.prospect_id) as jml,a.remark
FROM industry a
INNER JOIN prospect b ON b.industry=a.industry_id AND b.first_contact>’$first_contact’
GROUP BY industry_id ORDER BY jml DESC “;
$dataProvider=new CSqlDataProvider($sql, array(
‘totalItemCount’=>$count,
‘pagination’=>array(
‘pageSize’=>100,
),
));
$this->render(‘admin’,array(
‘dataProvider’=>$dataProvider,
));
}
Pada views – _search.php:
Pada contoh ini, kita hanya ingin search untuk first_contact saja, sehingga pada _search.php kita edit seperti berikut ini:
<div class=”wide form”>
<?php $form=$this->beginWidget(‘CActiveForm’, array(
‘action’=>Yii::app()->createUrl($this->route),
‘method’=>’get’,
)); ?>
<?php
/*
?>
<div class=”row”>
<?php echo $form->label($model,’industry_id’); ?>
<?php echo $form->textField($model,’industry_id’); ?>
</div>
<div class=”row”>
<?php echo $form->label($model,’industry_name’); ?>
<?php echo $form->textField($model,’industry_name’,array(‘size’=>50,’maxlength’=>50)); ?>
</div>
<div class=”row”>
<?php echo $form->label($model,’remark’); ?>
<?php echo $form->textField($model,’remark’,array(‘size’=>60,’maxlength’=>2000)); ?>
</div>
<?php
*/
?>
<div class=”row”>
<label>First Contact: ></label><input type=”text” value=”<?php echo $_GET[‘first_contact’];?>” name=”first_contact”>
</div>
<div class=”row buttons”>
<?php echo CHtml::submitButton(‘Search’); ?>
</div>
<?php $this->endWidget(); ?>
</div><!– search-form –>
Pada views- admin.php
Pada admin.php kita edit seperti berikut ini:
<?php
<div class=”search-form” style=”display:none”>
<?php $this->renderPartial(‘_search’,array(
));
?>
</div><!– search-form –>
<?php echo CHtml::Button(‘Add’,array(‘onClick’=>”location=’index.php?r=industry/create'”)); ?>
<?php
// ‘dataProvider’=>$model->search(),
// ‘filter’=>$model,
$first_contact=$_GET[‘first_contact’];
ob_start();
$this->widget(‘zii.widgets.grid.CGridView’, array(
‘id’=>’industry-grid’,
‘ajaxUpdate’=>false,
‘dataProvider’=>$dataProvider,
‘columns’=>array(
‘industry_name’,
‘jml’,
‘remark’,
array(
‘class’=>’CButtonColumn’,
‘deleteConfirmation’=>”js: ‘Are you want to delete ‘+$(this).parent().parent().children(‘:first-child’).text()+ ‘?'”,
‘buttons’ => array(
‘view’ => array(
‘label’=>’View’,
‘url’=>’Yii::app()->createUrl(“/prospect/admin”, array(“industry” => $data[“industry_id”],”Prospect_sort”=>”first_contact.desc”,”Prospect[first_contact]”=>”dollarfirst_contact”))’,
),
‘update’ => array(
‘label’=>’Update’,
‘url’=>’Yii::app()->createUrl(“/industry/update”, array(“id” => $data[“industry_id”]))’,
),
),
),
),
));
$content=ob_get_contents();
ob_end_clean();
$content=str_replace(“dollarfirst_contact”,”>$first_contact”,$content);
echo $content;
Pada coding di atas, untuk mengambil data dari rows menggunakan format $data[“industry_id”] . Kemudian karena kita kesulitan memasukkan suatu variabel di luar CGridView maka kita terpaksa memasukkan ke dalam buffer dan kemudian mengganti suatu coding yang telah dipesan dengan variabel kita seperti contoh berikut ini:
ob_start();
————————-object CGridView
$content=ob_get_contents();
ob_end_clean();
$content=str_replace(“dollarfirst_contact”,”>$first_contact”,$content);
echo $content;
Kunjungi www.proweb.co.id untuk menambah wawasan anda.