(Oleh Badiyanto)
widgets.grid.CGridView adalah komponen untuk menampilkan hasil delam bentuk tabel. Pada saat Controller memanggil lewat methode render(...), akan memangil file view yang didalamnya terdapat zii.widgets.grid.CGridView, kemudian menyertakan data dalam bentuk array misal 'model'->$model, atau hasil dari Query.
Bagian ini akan mencoba membuat tabel dengan widgets.grid.CGridView dibaris akhir terdapat TOTAL/JUMLAH DATA.
1. Tambahkan fungsi dalam model sebagai berikut :
public function searchLatihan1()
{
$sql="SELECT
id
,nama_pelatihan
,instruktur
FROM
kuliah.tbl_pelatihan";
$dataLatihan=Yii::app()->db->createCommand($sql)->queryAll();
$larikData=array();
$total=0;
$i=0;
foreach ($dataLatihan as $dataLatihan1){
$i++;
$total = $total + $this->hitungJumPes($dataLatihan1["id"]);
$larikData[] = array(
'no'=>$i,
'nama_pelatihan'=>$dataLatihan1["nama_pelatihan"],
'instruktur'=>$dataLatihan1["instruktur"],
'jumlah'=>$this->hitungJumPes($dataLatihan1["id"])
);
}
$larikData[] = array(
'no'=>"",
'nama_pelatihan'=>"",
'instruktur'=>"TOTAL KESELURUHAN",
'jumlah'=>$total,
);
$dataProvider=new CArrayDataProvider(
$larikData,array(
'keyField'=>false,
'pagination'=>array('pageSize'=>100,),
));
return $dataProvider;
}
Penjelasan
perintah :
$sql="SELECT
id
,nama_pelatihan
,instruktur
FROM
kuliah.tbl_pelatihan"; adalah pengambilan/menapilkan rekaman denga menggunakan Query.
$dataLatihan=Yii::app()->db->createCommand($sql)->queryAll(); hasil query disimpan ke dalam variabel $dataLatihan, $larikData=array(); mendeklarsikan variabel array
foreach ($dataLatihan as $dataLatihan1){
...................} melakukan loop untuk memindahkan data di variabel $dataLatihan ke $larikData
dengan perintah :
$larikData[] = array(
'no'=>$i,
'nama_pelatihan'=>$dataLatihan1["nama_pelatihan"],
'instruktur'=>$dataLatihan1["instruktur"],
'jumlah'=>$this->hitungJumPes($dataLatihan1["id"])
);
}
dan
$i++; konter nomor urut,
$total = $total + $this->hitungJumPes($dataLatihan1["id"]); menjumlahkan disimpan ke dalam variabel total dengan mengambil dari pemanggilan fungsi $this->hitungJumPes($dataLatihan1["id"]);
fungsi $this->hitungJumPes($dataLatihan1["id"]);
public function hitungJumPes($id)
{
return TblPesPelat::model()->count('tbl_pelatihan_id=:id',array(':id'=>$id));
}
2. Bagian Controller
public function actionJumlahPeserta()
{
$model=new TblPelatihan('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['TblPelatihan']))
$model->attributes=$_GET['TblPelatihan'];
$this->render('jumlahPeserta',array(
'model'=>$model,
));
}
3. Bagian Views dalam file jumlahPeserta.php
h1>Laporan Peserta Pelatihan</h1>
<?php echo CHtml::link('Advanced Search','#',array('class'=>'search-button')); ?>
<div class="search-form" style="display:none">
<?php $this->renderPartial('_search',array(
'model'=>$model,
)); ?>
</div><!-- search-form -->
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'tbl-pelatihan-grid',
'dataProvider'=>$model->searchLatihan1(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'id',
'type'=>'raw',
'header'=>'ID',
'value'=>'CHtml::encode($data["no"])',
'htmlOptions'=>array('width'=>'3%','style'=>'text-align:left'),
),
array(
'name'=>'nama_pelatihan',
'type'=>'raw',
'header'=>'PELATIHAN',
'value'=>'CHtml::encode($data["nama_pelatihan"])',
'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),
),
array(
'name'=>'instruktur',
'type'=>'raw',
'header'=>'INSTRUKTUR',
'value'=>'CHtml::encode($data["instruktur"])',
'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),
),
array(
'name'=>'jumlah',
'type'=>'raw',
'header'=>'JUMLAH',
'value'=>'CHtml::encode($data["jumlah"])',
'htmlOptions'=>array('width'=>'10%','style'=>'text-align:right'),
),
),
)); ?>
4. Uji Hasilnya