(oleh : Badiyanto)
Lanjutan dari tutorial sebelumnya, bagian ini akan menampilkan data buku dengan cara memasukkan pengarang terlebih dahulu. Anda bisa menambahkan method dalam model TblBuku.php sebagai berikut :
public function lihatBuku2($id)
     {
     $sql='SELECT
        tbl_buku.id
        , tbl_buku.judul_buku
        , tbl_penerbit.nama_penerbit
        , tbl_pengarang.nama_pengarang
        , tbl_buku.isbn_issn
        FROM
           kuliah.tbl_buku
          INNER JOIN kuliah.tbl_penerbit 
                ON (tbl_buku.penerbit_id = tbl_penerbit.id)
          INNER JOIN kuliah.tbl_pengarang 
                ON (tbl_buku.pengarang_id = tbl_pengarang.id)
          WHERE tbl_buku.pengarang_id = '. $id .            
          ' ORDER BY tbl_buku.id ';
        
     $daftarBuku=Yii::app()->db->createCommand($sql)->queryAll();    
     $dataProvider=new CArrayDataProvider(
                $daftarBuku,array(
                   'keyField'=>false,
                   'pagination'=>array('pageSize'=>100,),
           ));
 
          return $dataProvider;  
          
     } 
Kemudian tambahkan methode dalam TblBukuController.php fungsi aksi actionInputPengarang() sebagai input nama pengarang dan 
actionDaftarBuku2() seperti pada kode berikut :
public function actionInputPengarang()
    {
        $model=new TblBuku;
        $model->unsetAttributes();  // clear any default values
        if(isset($_POST['TblBuku'])){
            $id = $_POST['TblBuku']['pengarang_id'];
            $this->redirect(array('daftarBuku2','id'=>$id));
         }
        $this->render('inputPengarang',array('model'=>$model,));                    
    }
    
    public function actionDaftarBuku2()
    {
        $model=new TblBuku;
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['TblBuku']))
            $model->attributes=$_GET['TblBuku'];
        $this->render('daftarBuku2',array(
            'model'=>$model, 
        ));
    }
    
Kemudian buatlah program yang disimpan ke folder views/tblBuku/
inputPengarang.php
<?php
/* @var $this TblBukuController */
/* @var $model TblBuku */
/* @var $form CActiveForm */
?>
<div class="wide form">
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'tbl-buku-form',
    'enableAjaxValidation'=>false,)); ?>
    <p class="note">Fields with <span class="required">*</span> are required.</p>
    <?php echo $form->errorSummary($model); ?>
    <div class="row">
        <?php echo $form->labelEx($model,'pengarang_id'); ?>
        
        <?php echo  $form->dropDownList($model,'pengarang_id',CHtml::listData(
TblPengarang::model()->findAll(), 'id','nama_pengarang'),
              array('prompt'=>'= Pilihan =','style'=>'width:200px;')); ?>
        
        <?php echo $form->error($model,'pengarang_id'); ?>
    </div>    
    <div class="row buttons">
        <?php echo CHtml::submitButton('Proses'); ?>
    </div>
<?php $this->endWidget(); ?>
</div><!-- form -->
dan tambahkan program dalam view/tbelBuku/ dengan nama file daftarBuku2.php
<h1>
DAFTAR BUKU MENURUT PENGARANG
</h1>
<!-- // menbaca id pengarang// -->
<?php $id = $_GET["id"]; ?>
<?php $this->widget('zii.widgets.CDetailView', array(
    'data'=>$model,
    'attributes'=>array(
    array(
          'label'=>'Nama Pengrarang',
          'type'=>'html',
          'value'=>TblPengarang::model()->findByPk($id)->nama_pengarang, 
          ),
    array(
          'label'=>'Alamat',
          'type'=>'html',
          'value'=>TblPengarang::model()->findByPk($id)->alamat, 
          ),      
    ),
)); ?>
<!-- menampilkan tabel dengan grid.Cgridwiew//-->
<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'tbl-buku-grid',
    'dataProvider'=>$model->lihatBuku2($id),
    'columns'=>array(
           array(
            'name'=>'id',
            'type'=>'raw',
            'header'=>'NO',
            'value'=>'CHtml::encode($data["id"])',
            'htmlOptions'=>array('width'=>'3%','style'=>'text-align:left'),
        ),
        array(
            'name'=>'judul',
            'type'=>'raw',
            'header'=>'JUDUL BUKU',
            'value'=>'CHtml::encode($data["judul_buku"])',
            'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),    
        ),
      array(
            'name'=>'nama_pengarang',
            'type'=>'raw',
            'header'=>'NAMA PENERBIT',
            'value'=>'CHtml::encode($data["nama_penerbit"])',
            'htmlOptions'=>array('width'=>'30%','style'=>'text-align:left'),
        ),    
         array(
            'name'=>'isbn_issn',
            'type'=>'raw',
            'header'=>'ISBN/ISSN',
            'value'=>'CHtml::encode($data["isbn_issn"])',
            'htmlOptions'=>array('width'=>'10%','style'=>'text-align:left'),
        ),    
    ),
)); ?>
Gambar hubugan Model, Views dan Controller

Pada saat user menjalankan http://localhost/coba/index.php?r=tblBuku/inputPengarang
maka Controller lewat aksi cationInputPengarang() memanggil file inputPengarang.php., serta menjalankan daftarBuku2 dengan mengirim variabel $id, lewat perintah $this->redirect(array('daftarBuku2','id'=>$id));. Kemudian pada saat user menekan tombol proses, aksi dilakukan oleh actionDaftarBuku3, akan memanggil file daftaBuku2.php, dengan menyertakan parameter $id,  kemudian dalam file daftaBuku2.php nilainya diambil dengan dengan perintah  <?php $id = $_GET["id"]; ?> digunakan untuk memberikan nilai input lewat variabel $id pada fungsi/method TblPengarang::model()->findByPk($id)->nama_pengarang,  dan  'dataProvider'=>$model->lihatBuku2($id), yang akan  dtampilkan ke gridView
Hasil uji coba

Klik Proses

Lanjutan ...? tunggu sedang cari ide...
 
                             
                            