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

2 komentar:

ai sTarLoVe mengatakan...

gggf

Unknown mengatakan...

maaf mba saya mau nanya, class Clinkcollom itu librari dari luar apa itu bawaan dari yii kak, kalau seandainya ada kita ngambil pada direktori mana

Posting Komentar