[Yii Framework] Membuat Auto Login Setelah Register

Setelah melakukan register, kita ingin user akan secara otomatis login ke dalam sistem. Nah, berikut step-step nya. Misal kita memiliki action login seperti berikut :

    public function actionLogin()
    {
        $model=new LoginForm;

        // if it is ajax validation request
        if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }

        // collect user input data
        if(isset($_POST['LoginForm']))
        {
            $model->attributes=$_POST['LoginForm'];
            // validate user input and redirect to the previous page if valid
            if($model->validate() && $model->login())
                $this->redirect(Yii::app()->user->returnUrl);
        }
        // display the login form
        $this->render('login',array('model'=>$model));
    }

Kode tersebut adalah kode bawaan Yii Framework saat kita membuat aplikasi.

Nah, untuk melakukan auto login tambahkan kode berikut pada action register disaat kondisi data user telah berhasil disimpan :

                $model2=new LoginForm;

                $model2->username=$username
                $model2->password=$password;

                if($model2->login())
                    $this->redirect(array('site/index'));

Btw, fungsi login yang ada kode data di atas adalah fungsi login yang saya asumsikan sudah anda buat pada form login(Itu juga kode bawaan dari Yii saat kita membuat aplikasi..)

Selesai.. selamat mencoba..
semoga membantu… 😀

Advertisements

[Yii Framework] Membuat Tampilan Dinamis dengan AJAX

Pada suatu kasus kita perlu membuat tampilan dinamis yang dapat berubah-ubah jika kita inginkan. Misal suatu kasus kita memiliki dropdownlist yang isinya “laki-laki” dan “perempuan”. Jika kita user memilih “laki-laki” maka akan tampil tulisan “Halo cowok cakep”, dan jika milih “perempuan” akan tampil tulisan “halo cewek cantik” :D. Okeh, pertama-tama yang perlu kita buat adalah dropdownlist untuk memilih jenis kelamin dan kita sisipkan AJAX request pada dropdownlist tersebut :

        
$jekel=array(
    array('id'=>1,'jj'=>'Laki-laki'),
    array('id'=>2,'jj'=>'Perempuan'),
);

echo 'Jenis Kelamin :  ';
echo CHtml::dropDownList('jkel',array(),
        CHtml::listData($jekel,'id', 'jj'),
        array('empty'=>'Pilih Jenis Kelamin','style'=>'width:165px','ajax' => array(
           'type'=>'POST',
           'dataType'=>'json',
           'url'=>CController::createUrl('/cat/nama'),
           'data' => "js:{haha:$(this).val()}",
           'success'=>'function(data){
              $("#dinam").html(data.isi);
       }',)
       )
).'<br/>';

Pada code di atas, dropdownlist akan merequest sebuah action pada “cat” controller dan pada action “nama”. Maka dari itu kita harus membuat action tersebut :

    public function actionNama()
    {
        $isi='';
        if($_POST['haha']==1)
        {
            $isi.='Hai Cowok Cakep';
        }
        else {
            $isi.='Hai Cewek Cantik';
        }

        echo CJSON::encode(array
         (
             'isi'=>$isi,
        ));
          Yii::app()->end();
    }

Dari code di atas kita melakukan set tampilan dimana jika yang dipilih pada dropdownlist adalah option dengan “id”=1 atau laki-laki, maka akan tertulis tulisan “Hai Cowok Cakep”, dan klo yang dipilih “id”=2 atau perempuan, maka akan keluar tulisan “Hai Cewek Cantik”.

Terus yang akan di set nilainya tampilan yang mana??

Nah, itu juga sudah di atur pada dropdownlist kita tadi. Anda akan melihat kode berikut :

$("#dinam").html(data.isi);

Maksud dari kode tersebut adalah bahwa kontrol yang memiliki “id”=”dinam” lah yang akan di set tulisannya secara dinamis.

Langkah terkhir adalah kita harus mendefinisikan kontrol dengan id “dinam”  tersebut pada view kita tempat anda mendefinisikan dropdownlist tadi :

<div id="dinam">
</div>

Sip, selesai..
Silahkan mencoba..

Semoga membantu… 😀

[Yii Framework] Menambah Validasi Sendiri

Anda pasti sering menggunakan validasi bawaan dari Yii Framework untuk aplikasi anda. Sangat banyak sekali kondisi suatu validasi dari aplikasi kita yang ga terdapat dari Yii Framework. Tapi tenang, kita dapat membuat suatu validasi sendiri..

Validasi yang akan kita buat adalah  validasi yang persis sama dengan yang ada pada Yii Framework. Dimana setiap kali validasi tersebut tidak terpenuhi, maka akan di tampilkan pesan error pada form input data anda. Lalu setiap kalo kita ingin mengecek apakah suatu inputan user sudah sesuai validasi atau belum dengan cara $itu->validate(), maka validasi yang kita buat tadi juga akan di proses oleh fungsi tersebut..

Nah, bagaimana caranya??, mari kita bahas :

Pada model yang ingin anda sisipkan validasinya, silahkan sisipkan sebuah fungsi validasi. Kurang lebih seperti ini contohnya :

 public function namavalidasi($attribute)
 {
    if($this->$attribute=='sabit')
    {
       $this->addError('nama', 'ga boleh sabit yang post');
       return false; 
    }
 }

Okeh, cara penggunaan validasi tersebut adalah seperti berikut :

public function rules()
 {
      return array(
         array('nama','namavalidasi'),
      );
 }

Sisipkan fungsi tersebut pada fungsi rules() yang terdapat di dalam model. Anda dapat menentukan attribute yang mana saja yang dapat anda sisipkan tersebut..

Selesai.. Selamat mencoba..

Semoga membantu.. 😀

Pencarian Cepat dengan Apache Solr

Apache solr, anda bisa lihat disini, sesuatu yang dapat mempermudah aplikasi melakukan pencarian. Tidak hanya mudah, tapi ini juga dapat mempercepat kinerja dari suatu pencarian. Ini gratis anda gunakan dan anda dapat mendapatkannya disini. Setelah anda mengunduh apache solr, unpack dan letakkan pada suatu direktori.. terserah anda dimana saja..

 

Untuk penggunaanya sendiri, anda harus mengaktifkannya terlebih dahulu dengan menjalankan “example/start.jar”. Lalu buka browser anda dan coba masukkan alamat http://localhost:8983/solr/admin/ (biasanya port defaul apache solr adalah 8983, silahkan sesuaikan dengan milik anda jika berbeda). Bila sudah aktif, maka pada browser akan tampil halaman seperti berikut :

 

Jika sudah berarti anda dapat menggunakannya..

Pada anda pengguna PHP, untuk menggunakan apache solr anda harus menggunakan Solr PHP Client yang dapat anda dapatkan disini. Khusus pengguna Yii Framework, in next post saya akan membahas penggunaan Apache Solr pada Yii Framework hingga bagaimana trik agar dapat melakukan index data dari file PDF..

Sampai berjumpa pada posting selanjutnya..

[Yii Framework] Dropdownlist yang Terhubung Dengan Banyak Dropdownlist Lain

Cukup tertarik dengan pertanyaan yang ada disini, maka saya rasa lebih bagus kalo jawabnnya dibuat postingan saja..

Misal, ketika kita memilih suatu dropdownlist, kita ingin dropdownlist tersebut otomatis langsung mengeset nilai di DUA buah dropdownlist yang lain berdasarkan nilai yang sudah kita pilih..

Pada tampilan dropdownlist, masukkan kode berikut :

echo $form->dropDownList($member,'kewarganegaraan',
   CHtml::listData(Negara::model()->findAll(), 'id', 'negara'),
     array('empty' => 'choose :',
       'ajax' => array(
       'type'=>'POST',
       'dataType'=>'json',
       'url'=>CController::createUrl('/namaController/namaAction'),
       'data' => "js:{haha:$(this).val()}",
       'success'=>'function(data){
           $("#Member_provinsi").html(data.satu);
           $("#Member_kota").html(data.dua);
       }',
 )));

Penjelasan : code di atas akan mengeset dropdownlist yang memiliki inisial  “Member_provinsi” dan “Member_kota”. Kedua nilai tersebut akan memanggil fungsi yang terdapat dalam suatu controller..

Nah, kemudian pada controller buat action berikut  :

 public function actionNamaaction()
 {
    $satu='';
    $dua='';
    $data=NamaModel1::model()->findAllByAttributes(array('namaAttribute'=>$_POST['haha']));
    $data=CHtml::listData($data,'id','provinsi');

    foreach($data as $value=>$name)
    {
      $satu.= CHtml::tag('option',
        array('value'=>$value),CHtml::encode($name),true);
    }

    $data2=NamaModel2::model()->findAllByAttributes(array('namaattribute'=>$_POST['haha']));
    $data2=CHtml::listData($data2,'id','kota');
     foreach($data2 as $value=>$name)
     {
         $dua.=CHtml::tag('option',
           array('value'=>$value),CHtml::encode($name),true);
     }

     echo CJSON::encode(array
     (
         'satu'=>$satu,
         'dua'=>$dua
      ));
      Yii::app()->end();
 }

Kode di atas akan mengembalikan sebuah nilai dengan tipe JSON, dimana kedua nilai itu kemuadian akan digunakan untuk mengeset dua buah dropdownlist yang sudah kita tentukan tadi…

Selesai… selamat mencoba…

Semoga membantu yak… 😀

[Yii Framework] Convert Data To Excel

Data yang sudah kita miliki sering kali harus kita konversi ke dalam bentuk excel untuk suatu kebutuhan. Berikut langkah-langkah mengkonversi data ke dalam excel dengan menggunakan Yii Framework.

Proses ini sendiri saya lakukan dengan menggunakan sebuah extension yang ada pada Yii Framework, yaitu extension phpexcel yang dapat anda download disini. Silahkan anda download file tersebut dan copy ke dalam folder extensions yang sudah ada pada project Yii anda. Berikut kode yang perlu anda masukkan untuk mengkonversi data anda ke dalam excel :

    $hasil=Masukkan nilai array anda disini
    Yii::import('application.extensions.phpexcel.JPhpExcel');
    $xls = new JPhpExcel('UTF-8', false, 'test');
    $xls->addArray($hasil);
    $xls->generateXML('namaFileExcelYangAkanDihasilkan');

Penjelasan : pada variabel $hasil anda harus mendefinisikan dulu array yang anda miliki. Setelah itu array tersebut anda masukkan ke dalam sebuah parameter pada JPhpExcel. Dan secara otomatis file excel akan dihasilkan dan sudah tersedia untuk di download..

Selesai.. Selamat mencoba..

Semoga membantu.. 😀

[Yii Framework] Dropdownlist yang Terhubung

Tujuan dari posting ini tidak berbeda dengan postingan ini, hanya saja saya akan menunjukkan cara lain untuk melakukannya yang menurut saya lebih mudah untuk dipahami..

Yah, misal seperti kasus tersebut, kita memiliki tabel “Provinsi” dan “Kota” dimana kota yang dipilih harus sesuai dengan provinsi yang telah dipilih. Anggaplah saya sudah memiliki dua buah attribut kota dan provinsi. Hal pertama yang harus kita lakukan adalah membuat action yang akan dijalankan ketika attribut provinsi di pilih. Ketika attribute provinsi dipilih, maka attribute kota otomatis akan hanya berisi list kota yang berada pada provinsi tersebut. Code nya seperti beriikut :

public function actionSetKot()
 {
    $data=TabelKota::model()->findAllByAttributes(array('idProv'=>$_POST['haha']));
    $data=CHtml::listData($data,'id','kota');
    foreach($data as $value=>$name)
    {
          echo CHtml::tag('option',
          array('value'=>$value),CHtml::encode($name),true);
    }
 }

Penjelasan : pada code di atas, akan menghasilkan sekumpulan data dari tabel kota yang mana di filter berdasarkan “idProv”(id Provinsi) sesuai dengan request. Setelah itu sekumpulan data itu akan digunakan untuk mengisi option yang ada pada attribute kota.

Nah, setelah membuat action tersebut kita harus memodifikasi code pada form yang bertugas untuk me-request permintaan untuk mengeset attribute kota ketika attribute provinsi telah dipilih.. Berikut code nya :

<div>
  <?php echo $form->labelEx($model,'provinsi'); ?>
  <?php 
     echo $form->dropDownList($model,'provinsi',array(),
         array('empty' => 'choose :',
          'ajax' => array(
             'type'=>'POST',
              url'=>CController::createUrl('namaController/setkot'),
             'data' => "js:{haha:$(this).val()}",
             'update'=>'#Namamodel_kota',
          ))); 
 ?>
 <?php echo $form->error($model,'provinsi'); ?>
</div>
<div>
   <?php echo $form->labelEx($model,'kota'); ?>
   <?php 
         echo $form->dropDownList($model,'kota', array(),
            array('empty' => 'choose :')); 
   ?>
   <?php echo $form->error($model,'kota'); ?>
</div>

Penjelasan : code di atas adalah code pada halaman form. Pada dropdown “provinsi”, terdapat beberapa perintah yang digunakan untuk mengirimkan request jika attribute tersebut telah dipilih oleh user. Disana terlihat request tersebut akan memanggil action “setkot” yang sudah kita buat sebelumnya dimana setelah action tersebut dipilih, maka data akan mengupdate attribute “#Namamodel_kota”. Namamodel_kota merupakan attribute kota, disana terdapat tambahan kata “Namamodel” dikarenakan dia adalah attribute dari suatu model.

Selesai.. Selamat mencoba..

Semoga membantu.. 😀

%d bloggers like this: