KONDISI CGRIDVIEW

gan tanya dong , tentang cgridview, ane punya coding di controller gini :




public function actionSpkl() {


        $model = new Docspkl('search');

        if (isset($_GET['Docspkl']))

            $model->attributes = $_GET['Docspkl'];


        $varspkl = new Spkl;

        if (isset($_GET['Spkl']))

            $varspkl->attributes = $_GET['Spkl'];




        $user = new User;

        if (isset($_POST['Spkl'])) {

            $varspkl->attributes = $_POST['Spkl'];

            $thn = $varspkl->attributes['tahun'];

            $bln = $varspkl->attributes['bulan'];

            $unit = $varspkl->attributes['namaunit'];

            //print_r($unit);


            if (!empty($unit)) {

                $anggaran = $varspkl->searchAnggaran($thn, $bln, $unit);


                if ($anggaran == 0) {

                    $userspkl = Docspkl::model()->listUserSpkl(10, 10, 10);

                    $tampil = 0;

                } else {

                    $userspkl = Docspkl::model()->listUserSpkl($unit, $bln, $thn); /* panggil model, intinya disini kayaknya untuk masalah ane buat kondisi jika criteria $criteria maka table A yang berelasi dengan table B yang akan tampil, sedangkan criteria $crit maka table B yang akan di tampil */

                    $tampil = 1;

                }

            } else {

                $userspkl = Docspkl::model()->listUserSpkl(10, 10, 10);

                $tampil = 0;

            }

        } else {

            $userspkl = Docspkl::model()->listUserSpkl(10, 10, 10);

            $tampil = 0;

        }


        $this->render('spkl', array(

            'model' => $model,

            'varspkl' => $varspkl,

            'anggaran' => $anggaran,

            'userspkl' => $userspkl,

            'tampil' => $tampil,

            'bln' => $bln,

            'thn' => $thn,

        ));

    }




nah untuk di model nya ane pake ginian:




        public function listUserSpkl($u,$b,$t){

        $criteria = new CDbCriteria;

        $criteria->compare('namaunit',$u);

        $criteria->compare('bandposisi', 'VI');

        $criteria->compare('bulan',$<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='B)' />;

        $criteria->compare('tahun', $t);

        $jmlbaris = Docspkl::model()->count($criteria);

        


        //$datafilter = array_filter($dataprovider);

        if($jmlbaris != 0){

            return new CActiveDataProvider($this,array('criteria'=>$criteria));                

        }

        

        else{

            $crit = new CDbCriteria;

            $crit->compare('namaunit',$un);

            $crit->compare('bandposisi', 'VI');


            return new CActiveDataProvider(User, array(

                'criteria' => $crit,

                ));

        }

    }




di view gini gan :




$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'docspkl-grid',

	'dataProvider'=>$userspkl,

	'emptyText'=>'Data Tidak Ditemukan',

	'columns'=>array(

		//'spkl.iddocsspkl',

		'nik',

		'nama',

                array(

                    'name'=>'status',

                    'value'=>'Docspkl::model()->statusSpkl($data->status)',

                ),

                array(

                    'name'=>'Lembur(Jam)',

                    'value'=> 'SpklDetail::model()->hitungJamLemburTotal($data->iddocsspkl)',

                ),

                array(

                    'name'=>'Lembur(Rp)',

                    'value'=> 'SpklDetail::model()->hitungRencanaAgrLembur($data->iddocsspkl)',

                ),

		array(

			'class'=>'CButtonColumn',

                        'template'=>'{createspkl}{viewspkl}',

                        'buttons'=>array(

                            'createspkl'=>array(

                            'label'=>'[Buat SPKL]',

                            'url'=>  'Yii::app()->createUrl("docspkl/create",array("nik"=>$data->nik)',

                            'visible'=> 'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == FALSE',

                            ),

                            

                            'viewspkl'=>array(

                            'label'=>'[Lihat SPKL]',

                            'url'=> 'Yii::app()->createUrl("spkldetail/viewdetail",array("iddocsspkl"=>$data->iddocsspkl))',

                            'visible'=>  'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == TRUE',

                            ),

                        ),

		),

	),

));    




yang ingin ane tanya gan , gmana ya biar di digridview yang tampil berdasarkan kondisi yang di model yang di panggil di controller? misal jika :




$userspkl = Docspkl::model()->listUserSpkl($unit,$bln,$thn); // lihat di controller diatas



$userspkl dapat dari hasil model $criteria menghasilkan di gridview A, tapi jika $userspkl dapat dari hasil $crit menghasilkan gridview B ???? ane bingung gan , mohon di bantu yak …

gak ngerti maksudnya apa…

ini solusinya saya tebak2 maksudnya apa,




	if($jmlbaris != 0){

            return array(

            	'tipe' => 'a',

		'data' => new CActiveDataProvider($this,array('criteria'=>$criteria))

            )

        }

        

        else{

            $crit = new CDbCriteria;

            $crit->compare('namaunit',$un);

            $crit->compare('bandposisi', 'VI');


            return array(

            	'tipe' => 'b',

            	'data' => new CActiveDataProvider(User, array(

                'criteria' => $crit,

                ))

              );

        }







list($tipe, $userspkl) = Docspkl::model()->listUserSpkl($unit, $bln, $thn); 


///


switch($tipe){

	'a':

		//tampil tabel A

		break;

	'b':

		//tampil tabel B

		break;

}




list($tipe, $userspkl) = Docspkl::model()->listUserSpkl($unit, $bln, $thn); 


///


switch($tipe){

	'a':

		//tampil tabel A

		break;

	'b':

		//tampil tabel B

		break;

}

ini gak ngerti mas , tampilin di view gmana ???

maksud saya gini mas,misal ya , di tabel A yang berelasi dg tabel B, ada satu field status, jadi di gridview kan di panggil dengan cara gini : spkl.status, nah untuk yang tabel B status nya jika di panggil dri kondisi model yang hasilnya $crit itu , jadi gini di gridview: status,

itu maksudnya , intinya dengan kondisi A harus nya memanggil data spkl.status maka dengan kondisi B maka butuh status aja di grid view … itu maksud saya mas …

mohon di blas lagi …

kalo kondisi A manggil gridviewnya harusnya gimana?

kalo kondisi B manggil gridviewnya harusnya gimana?

klo yang A panggil yang di model cactiverecord yang ‘criteria’=>$criteria,

klo yang B panggil yang di model cactiverecord yang ‘criteria’=>$crit,

saya udah bikin gini mas di view , ini untuk kondisi ‘criteria’=>$criteria




$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'docspkl-grid',

	'dataProvider'=>$userspkl,

	'emptyText'=>'Data Tidak Ditemukan',

	'columns'=>array(

		'nik',

		'nama',

                array(

                    'name'=>'status',

                    'value'=>'Docspkl::model()->statusSpkl($data->status)',

                ),

                array(

                    'name'=>'Lembur(Jam)',

                    'value'=> 'SpklDetail::model()->hitungJamLemburTotal($data->iddocsspkl)',

                ),

                array(

                    'name'=>'Lembur(Rp)',

                    'value'=> 'SpklDetail::model()->hitungRencanaAgrLembur($data->iddocsspkl)',

                ),

		array(

			'class'=>'CButtonColumn',

                        'template'=>'{createspkl}{viewspkl}',

                        'buttons'=>array(

                            'createspkl'=>array(

                            'label'=>'[Buat SPKL]',

                            'url'=>  'Yii::app()->createUrl("docspkl/create",array("nik"=>$data->nik)',

                            'visible'=> 'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == FALSE',

                            ),

                            

                            'viewspkl'=>array(

                            'label'=>'[Lihat SPKL]',

                            'url'=> 'Yii::app()->createUrl("spkldetail/viewdetail",array("iddocsspkl"=>$data->iddocsspkl))',

                            'visible'=>  'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == TRUE',

                            ),

                        ),

		),

	),

));    




untuk misal kondisi B, gridview diatas seharusnya di salah satu array nya macem gini mas:




              array(

                    'name'=>'spkl.status',

                    'value'=>'Docspkl::model()->statusSpkl($data->spkl->status)',

                ),



controller ini gmana mas ? yang manggil model ?




$userspkl = Docspkl::model()->listUserSpkl($unit, $bln, $thn);



kan udah saya tulis di atas,

setiap manggil itu ya jadinya




list($tipe, $userspkl) = Docspkl::model()->listUserSpkl($unit, $bln, $thn);



pas render




        $this->render('spkl', array(

            'model' => $model,

            'varspkl' => $varspkl,

            'tipe' => $tipe,

            'anggaran' => $anggaran,

            'userspkl' => $userspkl,

            'tampil' => $tampil,

            'bln' => $bln,

            'thn' => $thn,

        ));




di viewnya ya,




switch($tipe){

//render gridview buat B,,,

        'a':

$this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'docspkl-grid',

        'dataProvider'=>$userspkl,

        'emptyText'=>'Data Tidak Ditemukan',

        'columns'=>array(

                'nik',

                'nama',

                array(

                    'name'=>'status',

                    'value'=>'Docspkl::model()->statusSpkl($data->status)',

                ),

                array(

                    'name'=>'Lembur(Jam)',

                    'value'=> 'SpklDetail::model()->hitungJamLemburTotal($data->iddocsspkl)',

                ),

                array(

                    'name'=>'Lembur(Rp)',

                    'value'=> 'SpklDetail::model()->hitungRencanaAgrLembur($data->iddocsspkl)',

                ),

                array(

                        'class'=>'CButtonColumn',

                        'template'=>'{createspkl}{viewspkl}',

                        'buttons'=>array(

                            'createspkl'=>array(

                            'label'=>'[Buat SPKL]',

                            'url'=>  'Yii::app()->createUrl("docspkl/create",array("nik"=>$data->nik)',

                            'visible'=> 'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == FALSE',

                            ),

                            

                            'viewspkl'=>array(

                            'label'=>'[Lihat SPKL]',

                            'url'=> 'Yii::app()->createUrl("spkldetail/viewdetail",array("iddocsspkl"=>$data->iddocsspkl))',

                            'visible'=>  'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == TRUE',

                            ),

                        ),

                ),

        ),

));    

                break;

        'b':

//render gridview buat B,,, ini copy paste dari A,, columnya atur sendiri,,,

$this->widget('zii.widgets.grid.CGridView', array(

        'id'=>'docspkl-grid',

        'dataProvider'=>$userspkl,

        'emptyText'=>'Data Tidak Ditemukan',

        'columns'=>array(

                'nik',

                'nama',

                array(

                    'name'=>'status',

                    'value'=>'Docspkl::model()->statusSpkl($data->status)',

                ),

                array(

                    'name'=>'Lembur(Jam)',

                    'value'=> 'SpklDetail::model()->hitungJamLemburTotal($data->iddocsspkl)',

                ),

                array(

                    'name'=>'Lembur(Rp)',

                    'value'=> 'SpklDetail::model()->hitungRencanaAgrLembur($data->iddocsspkl)',

                ),

                array(

                        'class'=>'CButtonColumn',

                        'template'=>'{createspkl}{viewspkl}',

                        'buttons'=>array(

                            'createspkl'=>array(

                            'label'=>'[Buat SPKL]',

                            'url'=>  'Yii::app()->createUrl("docspkl/create",array("nik"=>$data->nik)',

                            'visible'=> 'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == FALSE',

                            ),

                            

                            'viewspkl'=>array(

                            'label'=>'[Lihat SPKL]',

                            'url'=> 'Yii::app()->createUrl("spkldetail/viewdetail",array("iddocsspkl"=>$data->iddocsspkl))',

                            'visible'=>  'Docspkl::model()->visibleBuatLihatSpkl($data->nik,$data->bulan,$data->tahun) == TRUE',

                            ),

                        ),

                ),

        ),

));    

                break;

}



kalo masih gak ngerti, saya no comment lagi deh,