Welcome

Welcome, thanks to look my blog

Wednesday, 8 October 2014

Membuat Open Flash Chart di Yii Framework

Membuat Open Flash Chart di Yii Framework


Open Flash Chart berfungsi untuk membuat sebuah informasi dalam bentuk grafik  pada sebuah website. pada kesempatan kali ini penulis mencoba untuk menerapkannya dalam framework Yii.

hal yang pertama harus dilakukan adalah mendownload widgetnya di disini. setelah anda download taruh folder tersebut dibawah protected/extentions. maka akan terlihat struktur seperti berikut :

  • ...
  • protected
    • ...
    • extensions
      • ...
      • OpenFlashChart2Widget
        • open-flash-chart-2-Lug-Wyrm-Charmer
        • swfobject
        • OpenFlashChart2Loader.php
        • OpenFlashChart2Widget.js
        • OpenFlashChart2Widget.php
      • ...
    • ...
  • ...
* jangan taruh semua hasil extrakan tapi hanya folder OpenFlashChart2Widget saja.

setelah itu kita tambahkan  code berikut untuk mengkonfigurasi   OpenFlashChart2Loader di (protected/config/main.php):


 return array(
 
      // autoloading model and component classes
      'import'=>array(
        'application.models.*',
        'application.components.*',
        'application.extensions.OpenFlashChart2Widget.OpenFlashChart2Loader',
      ),  
 
    );
 

 
langkah selanjutnya adalah membuat grafik. kita tulis code data grafiknya di controller kita.
 
public function actionChart()
      {
        
        OpenFlashChart2Loader::load();
        
       //letakan data grafik kita disini 
        $chart ;
 //test adalah nama file view kita yang berisikan widget grafik
        $this->render('test', array(
          'chart' => $chart
        ));
      } 
 
disini saya contohkan membuat di controller/MahasiswaController.php
 
 public function actionChart()
      {
       
            OpenFlashChart2Loader::load();
        
        // dibawa ini adalah data grafik kita
      
$title = new title( date("D M d Y") );

 $data = array(9,8,7,6,5,4,3,2,1);
 $bar = new bar_dome();
 $bar->set_values( $data );
 $bar->set_on_show(new bar_on_show('grow-up',1,0,5));
 $chart = new open_flash_chart();
 $chart->set_title( $title );
 $chart->add_element( $bar );
 $chart;
 
        $this->render('test', array(
          'chart' => $chart
        ));
        
      } 

jangan lupa menambahkan accesRule chart di controller kita.
setelah itu kita tambahkan widget grafik kita di view/mahasiswa/test.php
 
<?php $this->widget('bootstrap.widgets.BootBreadcrumbs', array(
    'links'=>array('Organisasi'=>'index', 'Manage'),
)); 


 $this->widget(

   'application.extensions.OpenFlashChart2Widget.OpenFlashChart2Widget',

   array(

     'chart' => $chart,

     'width' => '100%'

   )

 );
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
?>  
 
setelah itu coba kita lihat dibrowser kita dengan controller mahasiswa/chart maka akan 
tampil grafik seperti berikut :
 
 

Untuk melihat contoh2 bentuk grafik lainya bisa dilihat disini

Grafik / chart dengan ChartJs di Yii

Artikel sebelumnya kita telah membuat grafik bar/barang menggunakan ChartJs. Kali ini kita akan menggunakan ChartJs dan digabungkan dengan framework PHP yang cukup terkenal. Kita akan membuat sebuah crontroller untuk mengambil data kemudian menampilkannya dalam view yang berisi tampilan untuk menampilkan grafik.
Langkah-langkah untuk membuat grafil dengan ChartJs di Yii adalah
  1. Silahkan download scriptnya di http://www.chartjs.org/ .
  2. Silahkan ekstrak pada suatu folder pada YII jerja anda anda, misalnya ./chartjs
  3. Buat suatu controller berisi data misalnya seperti  berikut ini:
        public function actionTampilBar()
        {
            
            $databar['Senin']=10;
            $databar['Selasa']=30;
            $databar['Rabu']=90;
            $databar['Kamis']=70;
            $databar['Jumat']=80;
            
            $this->render('tampil_bar',array('databar'=>$databar));
        }
  4. Kemudian untuk view tampil_bar.php nya misalnya :
    <script src="./chartjs/Chart.js"></script>
    <canvas id="kanvasku" height="450" width="600"></canvas>
    <script>
    var labelku = new Array();
    var dataku = new Array();;
    <?php
    $i=0;
    foreach ($databar as $key=>$value)
    {
        echo "\nlabelku[$i]='$key'; dataku[$i]=$value;";
        $i++;
    }
    ?>

            var barData = {
                labels : labelku,
                datasets : [
                    {
                        fillColor : "rgba(220,220,220,0.5)",
                        strokeColor : "rgba(220,220,220,1)",
                        data : dataku
                    },
                ]
                
            }

        var barKu = new Chart(document.getElementById("kanvasku").getContext("2d")).Bar(barData);
        
    </script>
  5. Jalankan Yii anda dan hasilnya dapat dilihat di http://aris.proweb.asia/yii01/index.php?r=site/tampilBar dengan tampilan akan seperti berikut ini:
Informasi lebih lanjut silahkan mengunjungi:
1. http://www.chartjs.org/ 
2. http://www.chartjs.org/docs/
Kunjungi www.proweb.co.id untuk menambah wawasan anda.

Menyimpan Gambar ke database pada YII

 Menyimpan Gambar ke database pada YII

Langkah pertama siapkan terlebih dahulu database tes dengan tabel siswa seperti berikut:
FieldJenisUkuran/Panjang/Nilai
nisint4
namaVarchar30
jenkelEnum‘Laki-laki’ , ‘Perempuan’
kelasVarchar10
file_nameChar30
file_typeChar15
file_contentMediumblob 
file_sizeInt11


Kemudian silakan buat model dan crud dari tabel siswa menggunakan GII.
Langkah selanjutnya buka file siswa.php yang ada pada folder model:
tambahkan variabel foto dengan cara ketikan script berikut:

<?php

/**
 * This is the model class for table "siswa".
 *
 * The followings are the available columns in table 'siswa':
 * @property integer $nis
 * @property string $nama
 * @property string $jenkel
 * @property string $kelas
 * @property string $file_name
 * @property string $file_type
 * @property string $file_content
 * @property integer $file_size
 */
class Siswa extends CActiveRecord
{
Public $foto;
...
Setelah menambahkan variabel foto kita perlu mendeklarasikan rules dari variabel foto tersebut dengan caracari script berikut:
 
public function rules()
{
                    // NOTE: you should only define rules for those attributes that
                    // will receive user inputs.
                    return array(
                    array('nisnamajenkelkelas, file_name, file_type, file_content, file_size', 'required'),
                    array('nis, file_size', 'numerical', 'integerOnly'=>true),
                    array('nama, file_name', 'length', 'max'=>30),
                    array('jenkel', 'length', 'max'=>9),
                    array('kelas', 'length', 'max'=>10),
                    array('file_type', 'length', 'max'=>15),

                   // The following rule is used by search().
                    // Please remove those attributes that should not be searched.
                    array('nisnamajenkelkelas, file_name, file_type, file_content, file_size', 'safe', 'on'=>'search'),
                    );
}
Setelah ditemukan silakan tambahkan script berikut dibawah script array('file_type', 'length', 'max'=>15),:
array('foto', 'file', 'types'=>'jpg, gif, png, jpeg','allowEmpty' => true),
Selain itu hapus “, file_name, file_type, file_content, file_sizepada rules requiredkarena variabel tersebut nanti bisa dikosongkan tidak harus diisi.
Sekarang tiba pada intinya untuk melakukan penyimpanan gambar ke database kita perlu menambahkan function before save pada model Siswa,functioninidigunakan untuk melakukan konversi dari variabel foto ke dalam variabel  file_name, file_type, file_size, file_contentScriptnya adalah sebagai berikut:
                public function beforeSave()
                {
                if(isset($this->foto))
                {
                if($file=CUploadedFile::getInstance($this,'foto'))
                {
                $this->file_name=$file->name;
                $this->file_type=$file->type;
                $this->file_size=$file->size;
                $this->file_content=file_get_contents($file->tempName);
                }
                }
                return parent::beforeSave();
                }
Kita telah selesai melakukan editing pada model Siswaselanjutnya kita perlumelakukan editing pada file form.php pada folder view/siswaSilakan buka filetersebut selanjutnya kita perlu menambahkan text field untuk variabel fotoSilakan cari script ini:
<div class="row">
                <?php echo $form->labelEx($model,'file_name'); ?>
                <?php echo $form->textField($model,'file_name',array('size'=>30,'maxlength'=>30)); ?>
                <?php echo $form->error($model,'file_name'); ?>
</div>
<div class="row">
                <?php echo $form->labelEx($model,'file_type'); ?>
                <?php echo $form->textField($model,'file_type',array('size'=>15,'maxlength'=>15)); ?>
                <?php echo $form->error($model,'file_type'); ?>
</div>
<div class="row">
                <?php echo $form->labelEx($model,'file_content'); ?>
                <?php echo $form->textField($model,'file_content'); ?>
                <?php echo $form->error($model,'file_content'); ?>
</div>
<div class="row">
                <?php echo $form->labelEx($model,'file_size'); ?>
                <?php echo $form->textField($model,'file_size'); ?>
                <?php echo $form->error($model,'file_size'); ?>
</div>
hapus script tersebut dan ganti dengan script berikut:
<div class="row">
                <?php  echo $form->labelEx($model,'foto'); ?>
                <?php  echo $form->fileField($model,'foto'); ?>
                <?php  echo $form->error($model,'foto'); ?>
</div>
Selanjutnya kita perlu mengedit script berikut:
<?php $form=$this->beginWidget('CActiveForm', array(
                'id'=>'siswa-form',
                'enableAjaxValidation'=>false,
            ));
 ?>
Menjadi:
<?php $form=$this->beginWidget('CActiveForm', array(
                'id'=>'siswa-form',
                'enableAjaxValidation'=>false,
                'htmlOptions' => array('enctype' => 'multipart/form-data'),       
             ));
?>
Kita telah berhasil melakukan penyimpanan file gambar kedalam database.


Sekarang pertanyaannya bagaimana cara menampilkannya???

Untuk menampilkan gambar tersebut kita memanfaatkan fungsi base64_encodesilakan buka file siswa.php pada folder model.
Kemudian tambahkan fungsi berikut kedalam class model:
public function data_uri($file, $mime, $contents) {
    $base64 = base64_encode($contents);
    return "data:$mime;base64,$base64";
}
Setelah itumisal kita ingin menampilkan foto tersebut pada file view pada folder  view/siswa tinggal kita panggil dengan script berikut berikut:
<?php if($model->file_name){ ?>
<img src="<?php echo $model->data_uri("$model->file_name", "$model->file_type","$model->file_content");
?>" alt="fotonya" height=120 width=100>
<?php } ?>
Maka kita berhasil menampilkan foto tersebut.