selalu belajar menjadi lebih bijaksana*
lagi dan lagi..

Membuat Upload dan Download File pada YII

Anyeong chingu :)
Sekarang saya akan membahas tentang bagaimana membuat upload file dalam format pdf pada surat masuk (tapi bisa juga untuk upload gambar, tinggal mengganti type-nya saja).

Step 1.
Masuk ke /protected/models/suratMasuk.php lalu ketik seperti di bawah ini.

public function rules()
{
   // NOTE: you should only define rules for those attributes that
   // will receive user inputs.
   return array(
       array('tgl_masuk, no_surat_masuk, perihal, lampiran, kepada, upload, dari, keterangan', 'required'),
       array('no_surat_masuk, perihal', 'length', 'max'=>30),
       array('lampiran', 'length', 'max'=>10),
       array('kepada, dari', 'length', 'max'=>40),
       array('upload', 'file', 'types'=>'pdf','maxSize'=>1024*1024*5, 'on'=>'insert'),
       // The following rule is used by search().
       // @todo Please remove those attributes that should not be searched.
       array('no, tgl_masuk, no_surat_masuk, perihal, lampiran, kepada, upload, dari, keterangan', 'safe', 'on'=>'search'),
    );
}

Nah yang perlu diperhatikan adalah “array('upload', 'file', 'types'=>'pdf','maxSize'=>1024*1024*5, 'on'=>'insert'),”   yang maksudnya field upload ini akan diisi oleh file dengan tipe pdf (kalo mau tipe png, jpg, gif juga bisa, tinggal diganti aja), dan ukuran maksimalnya adalah 5 Mb.

Untuk mengeset 5 Mb ini, kita perlu mengubah konfigurasinya di folder C:/xampp/php/php.ini
Ctrl + F lalu ketik ‘post_max_size’ nah disitu kita ganti menjadi ‘post_max_size = 5M’

Step 2.
Buka /protected/controllers/SuratMasukController.php dan masukkan source code berikut :

*pada actionCreate
public function actionCreate()
{
    $model=new SuratMasuk;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if(isset($_POST['SuratMasuk']))
    {
        $cekfile = $model->upload=CUploadedFile::getInstance($model,'upload');

        $model->attributes=$_POST['SuratMasuk'];
        $model->upload=CUploadedFile::getInstance($model,'upload');
        if($model->save())
        {
           if(!empty($cekfile))
           {
               $model->upload->saveAs(Yii::app()->basePath.'/../upload_file/'.$model->upload->getName());   
           }
        }             
        $this->redirect(array('view','id'=>$model->no));
    }

    $this->render('create',array(
              'model'=>$model,
              ));
}

Maksud code di atas, saat action create akan dicek dulu apakah field upload sudah terisi atau belum, jika belum maka gambar akan tersimpan pada field upload yaitu di folder ‘upload_file’ yang terletak di dalam folder aplikasi yii dan sejajar dengan folder protected.

*dan pada actionUpdate
public function actionUpdate($id)
                {
                                $model=$this->loadModel($id);
                                $image=$model->upload;

                                // Uncomment the following line if AJAX validation is needed
                                // $this->performAjaxValidation($model);

                                if(isset($_POST['SuratMasuk']))
                                {
                                                $cekfile = $model->upload=CUploadedFile::getInstance($model,'upload');

                                                //jika file tidak ada
                                                if (empty($cekfile))
                                                {
                                                                $model->attributes=$_POST['SuratMasuk'];
                                                                $model->upload = $image;

                                                                if($model->save())
                                                                {
                                                                                $this->redirect(array('view','id'=>$model->no));
                                                                }
                                                }

                                                else //jika file ada
                                                {
                                                                $model->attributes=$_POST['SuratMasuk'];
                                                                $model->upload=CUploadedFile::getInstance($model,'upload');             

                                                                if($model->save())
                                                                {
                                                                                $model->upload->saveAs(Yii::app()->basePath.'/../upload_file/'.$model->upload->getName());
                                                                                $this->redirect(array('view','id'=>$model->no));
                                                                }
                                                }
                                }

                                $this->render('update',array(
                                                'model'=>$model,
                                ));
                }

Step 3.
Sekarang kita buka /protected/views/suratMasuk/_form.php 
*perhatikan bagian ini ..
<?php $form=$this->beginWidget('CActiveForm', array(
                'id'=>'surat-masuk-form',
                'htmlOptions'=>array('enctype'=>'multipart/form-data'),
                // Please note: When you enable ajax validation, make sure the corresponding
                // controller action is handling ajax validation correctly.
                // There is a call to performAjaxValidation() commented in generated controller code.
                // See class documentation of CActiveForm for details on this.
                'enableAjaxValidation'=>false,
)); ?>

Yang harus ditambahkan adalah bagian ‘htmlOptions’. Selanjutnya tambahkan ini.

*ini digunakan untuk menampilkan gambar saat proses update, sehingga gambar yang sudah tersimpan di database akan ditampilkan
<?php if(!empty($model->upload)) { ?>
                <div class="row">
                                <?php echo CHtml::image(Yii::app()->request->baseUrl.'/upload_file/'.$model->upload.'','Surat Masuk',array('width'=>100)); ?>
                </div>
                <?php } ?>
<br>
//nah di sini perhatikan <?php yang kedua, sebelumnya adalah textField, di sini kita ganti menjadi fileField
                <div class="row">
                                <?php echo $form->labelEx($model,'upload'); ?>
                                <?php echo $form->fileField($model,'upload',array('size'=>60,'maxlength'=>255)); ?>
                                <?php echo $form->error($model,'upload'); ?>
                </div>

Nah perkara upload selesai, sekarang kita buat pasangannya yaitu download.
*ini untuk membuat download file di CgridView
<?php $this->widget('zii.widgets.grid.CGridView', array(
                'id'=>'surat-masuk-grid',
                'dataProvider'=>$model->search(),
                'filter'=>$model,
                'columns'=>array(
                                'no',
                                'tgl_masuk',
                                'no_surat_masuk',
                                'perihal',
                                'kepada',
                                array(
                                                'class'=>'CLinkColumn',
                                                'header'=>'File',
                                                'urlExpression'=>'Yii::app()->request->baseUrl."/upload_file/".$data->upload',
                                                'label'=>'Download',
                                                'linkHtmlOptions'=>array(      /*yang ini untuk membuat download new tab */
                                                                'target'=>'_blank',
                                                ),
                                ),
                                array(
                                                'class'=>'CButtonColumn',
                                ),
                ),
)); ?>

*ini untuk menampilkan hasil upload pada view
<center>
<?php
                echo "<br>";
                echo CHtml::image(Yii::app()->request->baseUrl.'/upload_file/'.$model->upload.'','Surat Masuk',array('width'=>600));
?>
</center>

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Membuat Captcha pada Login Form

Anyeong chingu :)
Kali ini saya akan sharing bagaimana membuat captcha pada Form Login.

Step 1.
Kita buat di controllernya yaitu di /protected/controllers/SiteController.php

public function accessRules()
                {
                                return array(
                                                array('allow',  // allow all users to perform 'index' and 'view' actions
                                                                'actions'=>array('captcha'),
                                                                'users'=>array('@'),
                                                ),
                                );
                }
               
/* untuk fungsi yang di bawah ini, biasanya sudah ada di SiteControllernya, tapi untuk kasus pendaftaran akun, fungsi ini perlu ditambahkan pada controller yang bersangkutan (jadi nggak harus di SiteController aja) */

public function actions()
                {
                                return array(
                                                // captcha action renders the CAPTCHA image displayed on the contact page
                                                'captcha'=>array(
                                                                'class'=>'CCaptchaAction',
                                                                'backColor'=>0xFFFFFF,
                                                ),
                                                // page action renders "static" pages stored under 'protected/views/site/pages'
                                                // They can be accessed via: index.php?r=site/page&view=FileName
                                                'page'=>array(
                                                                'class'=>'CViewAction',
                                                ),
                                );
                }

Step 2.
Selanjutnya kita atur di modelnya yaitu di /protected/models/LoginForm.php

Yang perlu diperhatikan yaitu penambahan deklarasi nilai public $verifyCode dan penambahan rule array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')), untuk lebih jelasnya bisa dilihat seperti source code di bawah.

class LoginForm extends CFormModel
{
                public $username;
                public $password;
                public $rememberMe;
                public $verifyCode;     //ini yang perlu ditambahkan

                private $_identity;

                /**
                 * Declares the validation rules.
                 * The rules state that username and password are required,
                 * and password needs to be authenticated.
                 */
                public function rules()
                {
                                return array(
                                                // username and password are required
                                                array('username, password, verifyCode', 'required'),
                                                // rememberMe needs to be a boolean
                                                array('rememberMe', 'boolean'),
                                                // password needs to be authenticated
                                                array('password', 'authenticate'),
                                                array('verifyCode', 'captcha', 'allowEmpty'=>!extension_loaded('gd')),    //dan ini yang harus ditambahkan
                                );
                }
Dan untuk coding selanjutnya sama, tidak ada perubahan apapun.

Step 3.
Terakhir kita atur di view-nya yaitu di /protected/views/site/login.php
Ingat !! Untuk yang menggunakan theme atau bootstrap atur view-nya di theme-nya ya.
Nah di bawah ini adalah source code untuk menampilkan captcha-nya ..

<?php if (extension_loaded('gd')): ?>
<div>
<?php echo CHtml::activeLabelEx($model, 'Kode Verifikasi') ?>
                <div>
                                <?php echo $form->textField($model,'verifyCode', array('class'=>'input-small')); ?>
                                <?php $this->widget('CCaptcha');?>
                </div>
                <div class="hint">Ketik tulisan yang ada pada gambar.</div>
</div>
<?php endif;?>

Source code di atas bisa kamu letakkan setelah source code username dan password, serta sebelum source code untuk menampilkan button-nya.



Sekian dari saya, semoga bisa dimengerti dan semoga bermanfaat :)

Salam programmer yii Indonesia.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Menyembunyikan Menu Agar Tampil Setelah Login

Anyeong chingu :)


Sekarang saya mau posting tentang menyembunyikan menu sebelum guest login. Ternyata gampang banget caranya :)
Kita buka /protected/views/layouts/main.php (untuk yang pake theme, buka di /theme/folder_themenya/views/layouts/main.php

<?php $this->widget('bootstrap.widgets.TbNavbar',array(
    'items'=>array(
        array(
            'class'=>'bootstrap.widgets.TbMenu',
            'items'=>array(
           array('label'=>'Home', 'url'=>array('/site/index'), 'visible'=>!Yii::app()->user->isGuest),
     array('label'=>'Surat Masuk', 'url'=>array('/suratMasuk/admin'), 'visible'=>!Yii::app()->user->isGuest),
           array('label'=>'Surat Keluar', 'url'=>array('/suratKeluar/admin'), 'visible'=>!Yii::app()->user->isGuest),
    array('label'=>'Gambar', 'url'=>array('/tblImages/index'), 'visible'=>!Yii::app()->user->isGuest),
            array('label'=>'Login', 'url'=>array('/site/login'), 'visible'=>Yii::app()->user->isGuest),
  array('label'=>'Logout ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest)
            ),
        ),
    ),
)); ?>

Nah itu perhatikan 'visible' nya.. Nanti hasilnya jadi seperti ini...


  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments

Database Arsip Surat dan Instalasi YII

Anyeong chingu :)
Salam kenal dari programmer amatir yii yang masih belajar :)
Di sini saya akan membahas bagaimana membuat sebuah aplikasi web Pengarsipan Surat Masuk dan Surat Keluar. Ini adalah project magang saya selama 3 bulan di Yayasan AirPutih “connected the unconnected” yang kantornya terletak di Pasar Minggu.
Curcol dulu sedikit, bisa dibayangkan bagaimana saya bolak-balik dari Rawa Buaya (Cengkareng) – Pasar Minggu 5 hari kerja selama 3 bulan, tapi suka bolos-bolos masuk juga sih hehehe :) Nah, belum lagi masalah LDR with ‘oppa’, yang dia juga lagi magang di PLN Gandul, tuh kan kebayang gimana beratnya hari-hari yang saya lalui, nahan kangennya itu loh. Ups !!

Oke fokus lagi. Di sini saya membuat database dengan nama db_arsip_surat yang terdiri atas 4 tabel yaitu surat_masuk, surat_keluar, tbl_images, dan tbl_manajer.


Saya jelaskan dulu.
Surat masuk ini berfungsi menampung semua inputan surat yang masuk ke kantor Yayasan AirPutih, yang nantinya akan di-input oleh admin dan dapat dilihat oleh manajer.
Surat keluar berfungsi menampung semua surat yang akan diberikan kepada mitra Yayasan AirPutih, yang mana admin bertugas membuat suratnya, kemudian sebelum dicetak, manajer akan mengecek terlebih dulu isi surat tersebut. Di sini manajer berhak menyetujui surat dan menolak (dalam arti memberikan koreksi untuk diperbaiki isi suratnya). Setelah manajer menyetujui surat tersebut, admin dapat mencetak dan mengirimkannya.
Tbl images berfungsi menampung gambar yang berupa logo dan alamat kantor Yayasan AirPutih, yang digunakan sebagai kop surat saat surat dicetak.
Tbl manajer berfungsi menampung koreksi dari manajer, termasuk menyetujui atau menolak surat keluar. Sehingga tbl manajer ini berelasi dengan surat keluar.

Nah di sini saya buat dengan nama arsip, di dalam folder arsip terdapat 2 buah yii yaitu arsipsurat (yang digunakan oleh admin) dan arsipsurat_manajer (yang digunakan oleh manajer). Sebenarnya cara saya membuat 2 yii ini adalah saya menginstal satu per satu dan disimpan ke htdocs, kemudian saya copy dan paste di htdocs/arsip. Lalu crud satu per satu yii nya. Di sini ga perlu saya jelaskan cara crudnya ya, saya anggap sudah terbiasa meng-crud yii.
Ini tampilan awalnya..


Ketika kita klik admin, maka akan tampil seperti gambar yang ini..


Dan ketika kita akan masuk sebagai manajer maka akan tampil gambar yang ini..


Nah, karena ada 2 yii maka kita harus meng-crud kedua yii tersebut dengan semua tabel yang ada di database. Jadi di sini saya menggunakan database yang sama untuk 2 yii yang saya gunakan.

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS
Read Comments