Beranda · Contact Us · Downloads

Yii: Upload File menggunakan model

Banyak cara yang bisa digunakan untuk sekedar menggunggah file ke dalam sistem. Salah satunya yang akan saya bahas di sini yaitu upload file menggunakan model. Di sini saya memanfaatkan class CUploadedFile yang sudah disediakan oleh yii.

1. Model
Langkah pertama yang mesti dilakukan adalah mendefinisikan attribut di dalam class yang digunakan. Kemudian definisikan pula validasi rulenya untuk memastikan extensi file yang bisa diunggah.
class Mahasiswa extends CActiveRecord
{
    public $image; 
    //......

public function rules()
    {
        return array(
          array('image','required','on'=>'create'),
          array('image','file','types'=>'jpg, gif, png',
            'allowEmpty'=>true,
            'maxSize'=>1024*1024*1,
            'tooLarge'=>'File terlalu besar, maksimal file 1 MB.'),
            //.......
          );
    }
}
2. View
Di dalam class form tambahkan kode untuk menampilkan field untuk mengunggah file.
<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'mahasiswa-form',
    'enableAjaxValidation'=>false,
    'htmlOptions'=> array('enctype'=>'multipart/form-data'),
)); ?>

<div>
    <?php echo $form->labelEx($model,'image');?>
    <?php echo $form->fileField($model,'image');?>
    <?php echo $form->error($model,'image');?>
</div>  
 
...........
 3. Controller
Kemudian di dalam controller definisikan action method
if(isset($_POST['Mahasiswa']))
   {
    $model->attributes=$_POST['Mahasiswa'];
    $gambar=CUploadedFile::getInstance($model,'image');
    $model->image=CUploadedFile::getInstance($model,'image');
    $nm_file=$model->image;

    if($model->save()){
      $gambar->saveAs(Yii::app()->basePath.'/../images/'.$nm_file);
      $this->redirect(array('view','id'=>$model->nim));
    }
}
Setelah berhasil mengunggah file, langkah selanjutnya adalah menampilkannya di view. Untuk menampilkan file gambar bisa menggunakan kode di bawah ini :
array('type'=>'raw',
      'label'=>'Foto',
      'value'=>html_entity_decode(CHtml::image(<Url_File>,'alt',
          array('width'=>85, 'height'=>85)))
),

Hasilnya :







Good Luck!

Artikel keren lainnya:

Yii: Menampilkan Google Captcha (reCAPTCHA)

Pada artikel kali ini saya akan membahas sedikit tentang bagaimana menggunakan google captcha (reCAPTCHA) di aplikasi web yii. Dengan bantuan extensions recaptcha kita hanya perlu melakukan sedikit perubahan/penambahan kode untuk menggunakannya.

Silahkan download file extensions recaptcha terlebih dahulu dengan klik download, kemudian ekstrak file tersebut di folder /protected/extensions.

Berikutnya adalah melakukan registrasi ke http://recaptcha.net/ untuk mendapatkan Site key dan Secret key. Site key digunakan untuk menyajikan ke user, sedangkan Secret key digunakan untuk komunikasi antara aplikasi dan google.

Untuk menggunakannya silahkan lakukan perubahan di model, view, serta controller :

1. Model, definisikan attribut beserta rulenya :
//protected/models/LoginForm.php
class LoginForm extends CFormModel
{
    public $validasi;
........

public function rules(){
  return array(           
    array('validasi',
    'application.extensions.recaptcha.EReCaptchaValidator',
    'privatekey'=>'<--masukkan Secret Key di sini-->'),

    array('validasi',
    'application.extensions.recaptcha.EReCaptchaValidator',
    'privatekey'=>'
ENVII_CAPTCHA_PRIVATE_KEY',
    'on'=>'registerwcaptcha'),

    ......
  );
}
 2. View
<?php
$this->widget('application.extensions.recaptcha.EReCaptcha',
   array('model'=>$model, 'attribute'=>'validasi',
      'theme'=>'red', 'language'=>'en',
      'publickey'=>'<--masukkan Site Key di sini-->')); ?>
 <?php echo Chtml::error($model,'validasi'); ?>
3. Controller
public function actionRegister()
    {
        $form = new user();
        $form->scenario = 'registerwcaptcha';
        if($form->validate())
        {
            $form->scenario=NULL;
            $form->save();
        }
    }

Untuk melihat hasilnya pastikan komputer Anda terhubung dengan internet. Koneksi internet tersebut dibutuhkan untuk komunikasi antara aplikasi dan google.




Good Luck!


Artikel keren lainnya:

Yii: Menambahkan Captcha di Halaman Login

Sebelum memulai saya akan memberikan sedikit ulasan tentang apa itu captcha. Kalau Anda pernah mengisi formulir di internet, pasti Anda pernah menjumpai gambar tulisan/huruf-huruf bengkok yang mungkin akan membuat Anda bingung lalu kemudian disuruh mengisikan huruf-huruf tersebut ke dalam kotak isian. Lalu apa huruf-huruf itu? Itukah yang disebut captcha? Lalu apa itu Captcha?

CAPTCHA merupakan singkatan dari Completely Automated Public Turing test to tell Computers dan Humans Apart. Captcha itu sendiri berguna untuk memastikan bahwa respon yang dihasilkan hanya boleh dibuat oleh manusia, bukan dari komputer atau lebih tepatnya untuk menghindari bot. Untuk lebih jelasnya silahkan tanya mbah google...

Kembali ke topik pembahasan, berbeda dengan Captcha di atas saya akan menggunakan captcha bawaan dari yii. Untuk menambahkan captcha di halaman login dibutuhkan sedikit ubahan coding, diantaranya :

1. Melakukan ubahan pada model 
    Tambahkan attribute berikut pada model:
//protected/models/LoginForm.php
class LoginForm extends CFormModel
{
    public $verifyCode;
    Membuat validasi rule
public function rules()
    {
        return array(
            //verifycode needs to be entered correctly
            array('verifyCode','captcha','allowEmpty'=>
            !CCaptcha::checkRequirements()),
2. Melakukan konfigurasi pada view
//protected/views/site/login.php
    <?php if (CCaptcha::checkRequirements()):?>
    <div class="row">
        <?php echo $form->labelEx($model,'verifyCode');?>
        <div>
        <?php $this->widget('CCaptcha');?>
        <?php echo $form->textField($model,'verifyCode');?>
        </div>
        <div class="hint">Please enter the letters as they are shown in the image above.
        <br/>Letter are not case-sensitive.</div>
        <?php echo $form->error($model,'verifyCode');?>
    </div>
    <?php endif;?>
3. Mengaktifkan captcha di controller
//protected/controllers/SiteController.php
public function actions()
    {
        return array(
            // captcha action renders the CAPTCHA image displayed on the contact page
            'captcha'=>array(
                'class'=>'CCaptchaAction',
                'backColor'=>0xFFFFFF,
            ),
Berikut hasilnya :


Good Luck!



Artikel keren lainnya:

Yii: Menampilkan Last Login di Halaman Utama

Untuk menampilkan last login pastikan Anda sudah membuat fungsi login dengan database. Jika belum silahkan membuatnya terlebih dahulu, berikut tutorial membuat login dengan database.

Siapkan/tambahkan field yang nantinya akan digunakan untuk menyimpan record :
FieldType
last_login_timedatetime
Langkah selanjutnya adalah melakukan sedikit ubahan authenticate() pada UserIdentity.
$this->setState('LastLogin', date("D, d M Y H:i:s",
strtotime($user->last_login_time)));
$user->saveAttributes(array('last_login_time'=>
date("Y-m-d H:i:s", time()),));
   
Maksud dari kode di atas yaitu mengambil nilai awal last_login_time dari database dan disimpan ke atribut LastLogin.  Kemudian last_login_time di database diperbaharui dengan nilai current time.
Untuk memanggil atribut tersebut bisa dilakukan dengan perintah :
Yii::app()->user->LastLogin;

Berikut saya contohkan :
<h1>Welcome to <i><?php echo CHtml::encode(Yii::app()->name); ?></i></h1>
......
<?php if(!Yii::app()->user->isGuest): ?>
<p>You last logged in on <?php echo Yii::app()->user->LastLogin; ?></p>
<?php endif; ?>

 
Jika berhasil login maka hasilnya adalah :


Good Luck!




Artikel keren lainnya:

Yii: Menampilkan Pesan Menggunakan setFlash

Yii menggunakan setFlash() untuk menampilkan pesan kepada user. Dimana setFlash ini bekerja dalam session yang artinya pesan akan ditampilkan dalam satu session dengan satu atau beberapa request dari user yang sama. Secara default pesan akan dihapus dari session setelah berhasil ditampilkan kepada user.

Hasil dari generate perintah yiic webapp menghasilkan CSS dimana secara default di dalamnya terdapat tiga class flash message yaitu flash-error, flash-notice, flash-success.

Untuk menggunakannya silahkan tuliskan pesan di controller :
Yii::app()->user->setFlash('error','error Hello world!');
Yii::app()->user->setFlash('notice','notice Hello world!');
Yii::app()->user->setFlash('success','success Hello world!');
Dan menampilkannya di view :
<h1> Hello World! </h1>
<?php if(Yii::app()->user->hasFlash('error')): ?>
<div class="flash-error">
   <?php echo Yii::app()->user->getFlash('error'); ?>
</div>
<?php endif; ?>

<?php if (Yii::app()->user->hasFlash('notice')): ?>
<div class="flash-notice">
    <?php echo Yii::app()->user->getFlash('notice'); ?>
</div>
<?php endif; ?>

<?php if (Yii::app()->user->hasFlash('success')): ?>
<div class="flash-success">
    <?php echo Yii::app()->user->getFlash('success'); ?>
</div>
<?php endif; ?>

Berikut hasilnya :


Untuk menambahkan efek fade-out silahkan tambahkan kode berikut di dalam view :
<?php
    Yii::app()->clientScript->registerScript(
    'myHideEffect',
    '$(".flash-error").animate({opacity: 1.0},
    5000).fadeOut("slow");',
    CClientScript::POS_READY
        );
?>



Good Luck!







Artikel keren lainnya:

Yii: Membuat sendiri Action Change Password

Untuk membuat sendiri action change password hal yang saya lakukan adalah :
  1. Membuat model PasswordForm untuk mendefiniskan attribut beserta rule
  2. Membuat _formpassword sebagai halaman form
  3. Membuat changepassword sebagai view, dan
  4. Membuat actionchangepassword sebagai action controller

1. Membuat model PasswordForm. Simpan sebagai /protected/models/PasswordForm.php
    Definisikan attribute beserta rule :
<?php
class PasswordForm extends CFormModel{
    public $oldpass;
    public $newpass;
    public $confirm;
   
    public function rules(){
        return array(
            array('oldpass, newpass, confirm','required'),
        );
    }
   
    public function attributeLabels(){
        return array(
        'oldpass'=>'Password Lama',
        'newpass'=>'Password Baru',
        'confirm'=>'Konfirm Password Baru',
        );
    }
}
?>
2. Membuat _formpassword sebagai halaman form.
    Untuk membuat form ini bisa mellihat/mengcopy dari form lain yang sudah ada.
    Simpan sebagai /protected/views/user/_formpassword.php dan isikan dengan kode berikut ini :
<div class="row">
    <?php echo $form->labelEx($model,'oldpass'); ?>
    <?php echo $form->passwordField($model,'oldpass',
        array('size'=>30));?>
    <?php echo $form->error($model,'oldpass'); ?>
</div>
   
<div class="row">
    <?php echo $form->labelEx($model,'newpass'); ?>
    <?php echo $form->passwordField($model,'newpass',
        array('size'=>30));?>
    <?php echo $form->error($model,'newpass'); ?>
</div>
   
<div class="row">
    <?php echo $form->labelEx($model,'confirm'); ?>
    <?php echo $form->passwordField($model,'confirm',
        array('size'=>30));?>
    <?php echo $form->error($model,'confirm'); ?>
</div>
3. Membuat view changepassword.
    Sama seperti halnya di atas, untuk membuat view ini bisa melihat/mengcopy dari view lain yang 
    sudah ada. Simpan sebagai /protected/views/user/changepassword.php
<?php
$this->breadcrumbs=array(
    'Users'=>array('index'),
    'Change Password',
);
?>

<h1>Change Password</h1>
<?php if(Yii::app()->user->hasFlash('error')): ?>
<div class="flash-error">
    <?php echo Yii::app()->user->getFlash('error'); ?>
</div>
<?php endif; ?>
<?php $this->renderPartial('_formpassword',
array('model'=>$model)); ?>
4. Membuat actionchangepassword
    Untuk membuatnya cukup definisikan actionchangepassword di dalam UserController.
    Tambahkan di dalam /protected/controllers/UserController.php kode di bawah ini :
public function actionChangepassword($username){
    $model = new PasswordForm;
    $modeluser = $this->loadModel(Yii::app()->user->id);
    if (isset($_POST['PasswordForm'])){
        $old = 'Helloword'.sha1($_POST['PasswordForm']['oldpass']);
        $new = 'Helloword'.sha1($_POST['PasswordForm']['newpass']);
        $konfirm = 'Helloword'.sha1($_POST['PasswordForm']['confirm']);
        if ($modeluser->password===$old){
            if ($old!=$new){
                if($new===$konfirm){
                    $modeluser->password=$new;
                    if($modeluser->save()){
                        $this->redirect(Yii::app()->homeUrl);
                    }
                } else{
                    Yii::app()->user->setFlash('error','Silahkan konfirmasi password baru Anda!');
                }
            } else{
                Yii::app()->user->setFlash('error','Maaf, password baru tidak boleh sama dengan password lama!');
            }
        }else{
            Yii::app()->user->setFlash('error','Periksa kembali password lama Anda!');
        }
    }
        $this->render('changepassword',array(
            'model'=>$model,
        ));
}

Silahkan pahami kode di atas :p . Dan berikut beberapa tampilan yang berhasil saya screenshot :





Good Luck!

Artikel keren lainnya:

Yii: Confirm Password

Konfirmasi password bertujuan untuk menghindari terjadinya kesalahan dalam penulisan password. Tidak jarang ketika mengisikan password pada form pendaftaran seperti pembuatan email kita akan diminta untuk memasukkan password sebanyak dua kali untuk konfirmasi kecocokan penulisan password.

Sebelumnya saya sudah pernah membuat ilustrasi penambahan user disertai username dan password untuk login ke sistem (klik di sini), hanya saja pada saat itu belum ada konfirmasi password. Baiklah, saya akan mencoba menambahkan konfirmasi password. Saya menggunakan usermodel yang sama seperti sebelumnya.

Sekenario yang saya gunakan :
"Ketika create dan update user di situ ada field password dan confirmpassword. Ketika create kedua field harus diisi (required), dan ketika update confirmpassword boleh kosong (password sama) atau masukkan password baru dan konfirmasi (confirmpassword harus diisi)."
 Langkah pertama buat attribute baru di dalam user model.
class User extends CActiveRecord
{
    public $repeat_password;

    .......
 kemudian definisikan rule
public function rules(){
    return array( 
        array('password','length', 'max'=>100),
        array('repeat_password','compare',
                'compareattribute'=>'password',
                'message'=>'password do not match','on'=>'create'),
        array('repeat_password','required','on'=>'create'),
        .....
ketika mendefinisikan model on untuk fungsi create ('on'=>'create'), gunakan :
public function actionCreate()
    {
        $model=new User('create');
        ....
Kemudian tambahkan field confirmpassword di _form.php
<div class="row">
    <?php echo $form->labelEx($model,'repeat_password'); ?>
    <?php echo $form->passwordField($model,'repeat_password',
        array('size'=>30,'maxlength'=>100)); ?>
    <?php echo $form->error($model,'repeat_password'); ?>
</div>
Mofidikasi action Update
public function actionUpdate($id) {
    $model=$this->loadModel($id);
    //mengambil nilai password
    $password=$model->password;
    if(isset($_POST['User']))
    {
        $model->attributes=$_POST['User'];
        $pass='Helloword'.sha1($_POST['User']['password']);
     $repeat='Helloword'.sha1($_POST['User']['repeat_password']);
        if($password===$_POST['User']['password']){
            $model->password=$password;
            if($model->save())
            $this->redirect(array('view','id'=>$model->id));
        } else if($password!=$pass) {
            if ($repeat===$pass){
                $model->password=$pass;
                if($model->save())
                $this->redirect(array('view','id'=>$model->id));
            }
            else {
            Yii::app()->user->setFlash('confirm','Konfirmasi password baru!');
            }
        }else {
            $model->password=$pass;
            if($model->save())
                $this->redirect(array('view','id'=>$model->id));
        }
    }
    $this->render('update',array(
            'model'=>$model,
        ));
}
Dan berikut adalah tampilan ketika create dan update :






Silahkan rubah dan pelajari script di atas..

Good Luck!

Artikel keren lainnya: