[Yii Framework] Select Many Data From CGridView

Untuk mempermudah user memodifikasi data yang jumlahnya cukup banyak, biasa nya kita menyediakan fasilitas agar user dapat memilih-milih data sekaligus. Biasanya hal ini kita lakukan dengan menyediakan sebuah tabel yang berisi data-data dan user dapat memilih data mana saja yang ingin dia gunakan seperti gambar berikut :

Disana anda dapat melihat kita menampilkan semua data dan user dapat memilih-milih data tertentu dengan cara mencentang checkbox yang terdapat disamping data tersebut…

Bagaimana cara membuatnya?? Kita dapat menggunakan CGridView untuk mempermudah pekerjaan kita melakukan hal tersebut.. Berikut step-stepnya :

Pertama-tama pada CGridView, kita harus menampilkan checkbox. Code CGridView anda yang awalnya seperti berikut :

 <?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'satu-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'satusatu',
        'satudua',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

Ubah menjadi seperti berikut :

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'satu-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'selectableRows'=>2,
    'columns'=>array(
         array(
             'class'=>'CCheckBoxColumn',   
               'id'=>'haha',
        ),
        'satusatu',
        'satudua',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

Penjelasan : pada code di atas kita menambahkan sebuah kolom yang berisi checkbox dan kita beri identitas ‘id’=haha. Setelah itu kita mengizinkan checkbox tersebut untuk di pilih banyak sekaligus dengan menyertakan code      ‘selectableRows’=>2, . Kode “2” yang ada pada kode tersebut menandakan checkbox tersebut dapat dipilih banyak sekaligus. Berikut beberapa aturan pada “selectabelRows” :

  • 0 – checkbox tidak bisa dirubah (read-only mode)
  • 1 –  hanya satu row yang dapat dipilih
  • 2  atau lebih – anda dapat memilih banyak checkbox dan pada anda disediakan sebuah checkbox yang digunakan untuk melakukan “select all” data pada cgridview.
  • Tidak melakukan setting – Jika anda tidak menyetting nilai selectabelRows, checkbox dapat dipilih sesuka user. Namun user tidak disediakan tombol “select all”.

Okeh, setelah kita telah berhasil menyediakan checkbox, sekarang saatnya kita menangkap nilai checkbox tersebut..

Anggaplah saya menyediakan sebuah tombol submit dimana tombol tersebut akan menangkap nilai yang ada pada CGridView tersebut dan menampilkannya pada suatu halaman. Saya membuat kode seperti berikut :

 <?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'satu-form',
    'action'=>array('satu/viewmany'),
    'enableAjaxValidation'=>false,
)); ?>
<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'satu-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'selectableRows'=>2,
    'columns'=>array(
         array(
             'class'=>'CCheckBoxColumn',   
               'id'=>'haha',
        ),
        'satusatu',
        'satudua',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>
<?php echo CHtml::submitButton('Create'); ?>
<?php $this->endWidget(); ?>

Penjelasan : Saya memubuat sebuah form yang dapat di POST dimana setiap ditekan tombol submit, form tersebut akan mengarah pada sebuah action yang terdapat pada “SatuController” dan action “viewmany”. Untuk itu, sekarang mari kita buat fungsi “viewmany”. Pada controller anda, buatlah sebuah fungsi berikut :

 public function actionViewmany()
    {
        $vari=array();
        if(isset($_POST['haha']))
        {
            $all=$_POST['haha'];

            foreach($_POST['haha'] as $a=>$val)
            {
                $simpan=$this->loadModel($val);    
                $vari[$a]=array('satusatu'=>$simpan->satusatu,
                        'satudua'=>$simpan->satudua);
            }

              $hasil=new CArrayDataProvider($vari, array(
                'keyField'=>'satusatu',
            ));

            $this->render('viewm',array(
                'dataProvider'=>$hasil,
            ));
        }
     }

Penjelasan : pada kode di atas kita membuat sebuah fungsi viewmany yang mana pada fungsi tersebut akan menangkap nilai “haha” yang terdapat pada form sebelumnya. Ingat kan kalo pada checkbox CGridView tadi saya memberi identitas dengan nama “haha”?? Yah, nilai itulah yang saya ambil. Setelah saya tangkap baris data yang telah dipilih oleh user, sekarang saya gunakan baris data tersebut untuk di tampilkan pada suatu halaman “viewm”. Buatlah sebuah halaman “viewm” pada view tepatnya pada folder “satu” sesuai dengan nama controller. Lalu isi kode berikut pada file tersebut :

 <?php
$this->breadcrumbs=array(
    'Satus',
);

$this->menu=array(
    array('label'=>'Create Satu', 'url'=>array('create')),
    array('label'=>'Manage Satu', 'url'=>array('admin')),
);
?>
<h1>Satus</h1>

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'satu-grid',
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        'satusatu',
        'satudua',
    ),
)); ?>

yah, Selesai…

Selamat mencoba…

Semoga membantu… 🙂

[Yii Framework] Menambahkan Captcha dari Recaptcha.Net

Mungkin anda tidak asing dengan gambar disamping yang sering digunakan untuk melakukan verifikasi kode pada banyak website. Kode tersebut sering disebut captcha, Yii Framework sendiri telah menyediakan class khusus untuk menampilkan captcha yang dapat kita gunakan untuk menggunakan verifikasi kode. Tapi mungkin beberapa dari anda tidak cukup puas menggunakan captcha yang ada dari Yii Framework, anda dapat menggunakan layanan captcha berikut dari recaptcha.

Recaptcha menydiakan layanan captcha secara gratis untuk digunakan. Bagaimana cara menggunakannya?? pertama-tama anda harus mendaftarkan diri terlebih dahulu untuk mendapatkan kodeAPI dari recaptcha tersebut disini. Ikuti tata cara pendaftaran dan anda akan mendapatkan public key dan private key yang akan digunakan pada aplikasi anda.

Recaptcha sudah menyediakan tutorial cara penggunaan recaptcha pada PHP, tapi komunitas Yii Framework juga sudah ada yang membuat extension khusus untuk mempermudah kita menggunakan recaptcha. Anda dapat menggunakan extension recaptcha  yang terdapat disini, silahkan di download. Setelah anda download, unpack file tersebut dan pindahkan folder tersebut pada folder extension aplikasi anda. Pada link tersebut sendiri sudah dipaparkan step-step untuk menggunakannya, tapi saya akan jelaskan lagi cara penggunaan extension tersebut.

Misal saya ingin menambahkan recaptcha pada proses login, pertama-tama pada model “LoginForm” anda harus tambahkan variabel baru yang akan menghandle recaptcha dan buat validasinya :

 public $username;
 public $password;
 public $rememberMe;
 public $capcay;
private $_identity;
 public function rules()
 {
    return array(
       array('username, password', 'required'),
       array('capcay',
          'application.extensions.recaptcha.EReCaptchaValidator',
          'privateKey'=>'masukan private key anda disini'),
      array('rememberMe', 'boolean'),
      array('password', 'authenticate'),
    );
 }

Lalu pada tampilan tambahkan sebuah attribute untuk menampilkan recaptcha :

<div class="row">
   <?php $this->widget('application.extensions.recaptcha.EReCaptcha',
      array('model'=>$model, 'attribute'=>'capcay',
      'theme'=>'red', 'language'=>'es_ES',
      'publicKey'=>'masukkan public key disini')) ?>
    <?php echo CHtml::error($model, 'capcay'); ?>
 </div>

Okeh, selseai..

Selamat mencoba…

Semoga membantu… 😀

[Yii Framework] Menambah Validasi Pada Model dengan Parameter

Sebelumnya saya pernah membahas step-step untuk menambah validasi pada model dalam Yii Framework. Pada kasus sebelumnya saya memaparkan cara membuat validasi yang bisa dibilang masih statis. Statis disini maksudnya adalah kita masih mengeset beberapa parameter secara manual. Contoh, kita tidak bisa mengeset pesan error, tidak bisa mengeset suatu nilai dalam suatu validasi. Pada kasus sebelumnya jika terjadi error maka akan muncul pesan “ga boleh sabit yang post”, padahal kita ingin pesan error tersebut dapat berubah-ubah tanpa harus kita membuat fungsi validasi baru lagi. Nah, bagaimana caranya?? mari kita bahas..

Buatlah fungsi validasi dengan dua buah parameter di dalamnya, yaitu $attribute dan $params :

public function namavalidasi($attribute,$params)
 {
   if($this->$attribute==$params['isi'])
   {
      $this->addError('nama', $params['message']);
      return false;
    }
}

Lalu pada fungsi validasi nya isi seperti berikut :

 array('title','namavalidasi','message'=>'judulnya ga boleh itu','isi'=>'makan'),

Nah, apa yang akan terjadi??

  • Disana terdapat variabel ‘message’=>’judulnya ga boleh itu’. Itu artinya aplikasi akan menampilkan pesan error “judulnya ga boleh itu” jika anda melakukan kesalahan validasi.
  • Lalu terdapat variabel ‘isi’=>makan. Sesuai dengan fungsi validasi di atas, itu artinya attribute “title” tidak diizinkan diinput dengan nilai “makan”. Jika tetap diisi nilai “makan” maka akan di tampilkan pesan error “judulnya ga boleh itu” pada aplikasi dan data tidak akan disimpan.
Nah, dengan cara itu anda dapat bebas bukan menentukan pesan error apa yang akan di tampilkan?? cukup set variabel ‘message’. Anda juga bebas menentukan kata apa yang tidak boleh dimasukkan hanya dengan mengeset variabel ‘isi’.
Selesai.. Selamat mencoba..
Semoga membantu.. 😀

[Yii Framework] Membuat Index Data Pada Apache Solr

Sebelumnya saya pernah memaparkan perkenalan dengan apache solr. Nah, sekarang saya akan menjelaskan step-step untuk melakukan index data apache solr pada Yii Framework. Okehh, tidak berbeda dengan menggunakan code PHP biasa kok, pertama-tama kita harus meng-include file Solr PHP Client untuk menghubungkan antara aplikasi kita dengan apache solr. Caranya adalah masukkan kode berikut pada controller tempat anda mengiput kode index apache solr :

Yii::import('application.tambahan.*');
require_once('SolrPhpClient/Apache/Solr/Service.php');

Yah, setelah itu buatlah setelah action tempat kita akan memasukkan kode membuat index pada apache solr. Nah, berikut kode membuat index data baru pada apache solr tersebut :

$solr = new Apache_Solr_Service('localhost', 8983, '/solr');
 if ($solr->ping())
 {
    try
    { 
       $doc = new Apache_Solr_Document();
       $doc->namaAttribute1 = 'isi attribute1';
       $doc->namaAttribute2 = 'isi attribute2';
       $solr->addDocument($doc); //Menambahkan dokumen
       $solr->commit(); //commit untuk melihat perubahan
       $solr->optimize(); //menggabungkan beberapa segmen menjadi satu sehingga efektif. 
    }
    catch(Exception $e)
    {
       echo $e->getMessage();
    }
 }

Penjelasan : pertama-tama kita mendefinisikan Apache Solr yang akan kita akses termasuk mendefinisikan port apache solr tersebut bekerja. Lalu aplikasi akan mengecek apakah sudah terhubung antara aplikasi dengan apache solr. Jika sudah terhubung, maka akan dibuat dokumen apache solr baru yang kemudian akan dimasukkan 2 buah attribute di dalamnya beserta nilainya(tidak harus 2 attirbute, ini sesuai dengan kebutuhan anda). Kemudian setelah di tambahkan attribute-attribute tersebut, maka akan disimpan sementara di variabel tersebut nilai-nilainya lalu disimpan ke dalam index file apache solr.

Nah, contoh kode yang ada di atas adalah kode untuk membuat index data baru. Apabila ingin melakukan delete index, anda dapat membuat kodenya seperti berikut :

 $solr = new Apache_Solr_Service('localhost', 8983, '/solr');
 if ($solr->ping()) 
 {
     try 
     {
        $solr->deleteByQuery('id: hhuu');
        $solr->commit();
        $solr->optimize();
     } 
     catch ( Exception $e ) 
    {
       echo $e->getMessage();
    }
 } 
else 
{
   echo "Connecting to solr failed....<br>";
}

Selesai.. selamat mencoba..

Semoga membantu… 😀

Free Ebook Yii Framework Indonesia

Bagi rekan-rekan komunitas yang tertarik mempelajari Yii Framework, saya telah membuat sebuah ebook Yii Framework yang isinya adalah beberapa bahasan menyangkut Yii Framework beserta contoh source code pembuatan aplikasi forum menggunakan Yii Framework. Ebook ini sendiri saya tujukan untuk komunitas Yii Framework Indonesia, karena itu isi dari ebook ini sendiri saya kemas dalam bahasa Indonesia agar rekan-rekan dapat lebih mudah mempelajari dan memahami materi di dalamnya. Setahu saya ini adalah ebook PERTAMA Yii Framework yang berbahasa Indonesia. Untuk mendapatkan ebook ini, anda tidak perlu merogoh kocek sedikitpun..  Ya, ebook ini FREE untuk rekan komunitas, cukup siapkan koneksi internet untuk mengunduh ebook ini dan anda sudah dapat memilikinya. Selain menyediakan pembahasan materi, ebook ini juga menyediakan source code contoh aplikasi yang dibuat dengan Yii Framework yang dapat anda dapatkan pada link berikut : http://freeebookyii.codeplex.com/.

Ebook ini sendiri masih jauh dari sempurna dan materi yang dibahas belumlah kompleks mencakup semua yang ada pada Yii Framework, untuk itu ebook ini ke depannya akan terus diperbaharui agar dapat terus membantu rekan-rekan komunitas. Dan bagi rekan komunitas yang tertarik ikut bergabung menulis ebook ini, saya dengan senang hati akan menerima keinginan anda.. hubungi saya ya kalo anda berminat..

Walau sudah berusaha keras terus menggodok pembahasan dalam ebook ini, saya sadar bahwa ebook ini tidak lepas dari banyak kekurangan dan kesalahan.. untuk itu kritik, saran dan masukan yang membangun amat sangat saya harapkan dari pera pembaca sekalian..

Yah, akhir kata saya ucapakan selamat belajar.. selamat menikmati ebook ini..

Semoga membantu.. 🙂

Download disini MenjelajahYiiFramework