Minggu, 28 Oktober 2012

Membuat Tanggal Seperti Facebook TimeAgo di Yii

Hmm.. mungkin kebanyakan kalau membuat aplikasi PHP untuk menampilkan tanggal biasanya langsung ditampilkan apa adanya seperti 2010-10-10 23:11:12. Nah kali ini ane ingin memberikan sedikit tutorial bagaimana caranya untuk membuat tampilan yang lebih user friendly mungkin seperti Facebook

Status 1
 1 minutes ago
Status 2
 a day ago

Yup untuk membuat tampilan seperti itu kita pertama kali harus tentuin dulu pastiin database yang kita pakai di table kita type data TIMESTAMP bukan date,datetime atau yang lainnya.

Okeh langsung saja pertama kali kita harus mengeset terlebih dahulu nih di configuration filenya

return array(
    .....
    'timeZone'=>'Asia/Jakarta',
    .....
)

Buat Sebuah Class DateHelper di Components ini hasil nyari di stackoverflow..


class DateHelper{
 public static function get_time_ago($time_stamp)
 {
 // $time_difference = Yii::app()->localtime->localNow - $time_stamp;
  $time_difference = strtotime('now') - $time_stamp;

  if ($time_difference >= 60 * 60 * 24 * 365.242199)
  {
   /*
    * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 365.242199 days/year
   * This means that the time difference is 1 year or more
   */
   return DateHelper::get_time_ago_string($time_stamp, 60 * 60 * 24 * 365.242199, 'year');
  }
  elseif ($time_difference >= 60 * 60 * 24 * 30.4368499)
  {
   /*
    * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 30.4368499 days/month
   * This means that the time difference is 1 month or more
   */
   return DateHelper::get_time_ago_string($time_stamp, 60 * 60 * 24 * 30.4368499, 'month');
  }
  elseif ($time_difference >= 60 * 60 * 24 * 7)
  {
   /*
    * 60 seconds/minute * 60 minutes/hour * 24 hours/day * 7 days/week
   * This means that the time difference is 1 week or more
   */
   return DateHelper::get_time_ago_string($time_stamp, 60 * 60 * 24 * 7, 'week');
  }
  elseif ($time_difference >= 60 * 60 * 24)
  {
   /*
    * 60 seconds/minute * 60 minutes/hour * 24 hours/day
   * This means that the time difference is 1 day or more
   */
   return DateHelper::get_time_ago_string($time_stamp, 60 * 60 * 24, 'day');
  }
  elseif ($time_difference >= 60 * 60)
  {
   /*
    * 60 seconds/minute * 60 minutes/hour
   * This means that the time difference is 1 hour or more
   */
   return DateHelper::get_time_ago_string($time_stamp, 60 * 60, 'hour');
  }
  else
  {
   /*
    * 60 seconds/minute
   * This means that the time difference is a matter of minutes
   */
   return DateHelper::get_time_ago_string($time_stamp, 60, 'minute');
  }
 }

 public static function get_time_ago_string($time_stamp, $divisor, $time_unit)
 {
  $time_difference = strtotime("now") - $time_stamp;
  $time_units      = floor($time_difference / $divisor);

  settype($time_units, 'string');

  if ($time_units === '0')
  {
   return 'less than 1 ' . $time_unit . ' ago';
  }
  elseif ($time_units === '1')
  {
   return '1 ' . $time_unit . ' ago';
  }
  else
  {
   /*
    * More than "1" $time_unit. This is the "plural" message.
   */
   // TODO: This pluralizes the time unit, which is done by adding "s" at the end; this will not work for i18n!
   return $time_units . ' ' . $time_unit . 's ago';
  }
 }
}

Okeh untuk mengetesnya kita bisa pakai seperti ini..

 echo DateHelper::get_time_ago(strtotime($data->date_time));


Kalau mau pake di sisi client bisa pake extensi yii timeago disini
http://www.yiiframework.com/extension/timeago/
Semoga bermanfaat....

Minggu, 21 Oktober 2012

Kesan Pertama Beralih Ke .NET dengan Bahasa C#

Okeh kali ini ane akan sedikit sharing sedikit mengenai peralihan belajar programming dari yang sebelumnya Open Source Banget menjadi Close Source Banget.. Yang belum tahu apa itu Open Source googling aja pasti ketemu.

So let's check it out satu per satu kesan pertama menggunakan .NET. Hmm.. Cerita dulu ane basicnya adalah programmer dengan bahasa Java yang notabene adalah programming yang bebas dan kebanyakan program yang bersifat Open Source. Dan juga PHP yang lebih bersifat Open Juga.


  1. Bahasa
    Dari segi bahasa mungkin udah kagak asing lagi bagi pengguna bahasa java menemukan code seperti ini dalam bahasa Java.
    Contoh Bahasa Java
    package org.latihan.model;
    
    import java.lang.*;
    
    public class Mahasiswa{
        private String nama;
     
        public void getNama(){
          return this.nama;
        }
        public void setNama(String nama){
          this.nama=nama;
        }
        public void belajar(){
           System.out.println("Belajar");
        }
    }
    
    Nah kalau di C# implementasinya jadi kayak gini:

    using System.Object;
    
    namespace Kampus{
     public class Mahasiswa{
      private string nama;
      
      public string Nama{
       set{
        this.nama=value;
       }
       get{
        return this.nama;
       }
      }
      
      public void Belajar(){
       Console.WriteLn("Belajar");
      }
      
     }
    }
    
    Nah kalau di C# selain ada field, method, ada juga namanya property jadi ada fungsi set dan getnya secara langsung yang gak diusah dipisah fungsi untuk mendapatkan get dan setnya.

    Secara bahasa sih emang gak begitu jauh sama java emang mirip banget cuma perbedaan istilah - istilah saja yang mungkin belum terbiasa. Kayak using = import, sealed=final, extends,implements = : , dll. Di C# juga kenal sama  pengembalian nilai lebih dari satu nilai nanti pakai out keyword. Overall sih mirip tinggal mengikuti saja apa aja yang di C#. Basename untuk method dan property menggunakan huruf besar pertama kali. Konstanta juga untuk di c# tidak menggunakan huruf besar semua.
  2. Database
    Nah untuk database nih, Kalau yang biasanya java pakainya kebanyakan pake MySQL atau PostgreSQL. Nah untuk C# karena pake teknologi Microsoft jadi pakainya untuk setara DBMS pake Microsoft SQL Server.

    Di SQL Server untuk alamat host dari SQL Servernya ada tambahan nama instance biasanya NAMA_KOMPUTER\INSTANCE_NAME contoh MRHANDS-PC\SQLSERVER. Nah beda sama MySQL atau PostgreSQL yang gak ada instance namenya. Dan juga backup dari SQL Server ini bisa pake pure SQL Command yang biasanya disimpan .sql atau pake file .bak yang bisa direstore ke tempat lain. Cuma harus disesuaikan sama versi SQL Servernya beda versi gak bisa diRestore.

    Nah Satu nilai Plus untuk C# dengan SQL Server atau database microsoft lain kayak Access atau Excel integratednya gampang. Dan kalau kita make DBMS Microsoft fungsi2 CRUD bisa langsung digenerated pake Visual Studio tanpa kita harus buat fungsinya satu - satu.

    Nah di Database ini ada satu hal yang menarik mungkin baru bagi pengguna Java yaitu LINQ dan LAMBDA Expression. Menggunakan perintah SQL di dalam bahasa pemrograman contoh : 
    var data=from Customer x in database.Customers
     where x.ID=="K12830" && x.Nama="Handita"
     select x;
    
    
  3. Web Programming
    Nah untuk Programmingnya yang kalau di Java biasanya servernya pake Tomcat atau GlassFish atau di PHP pakenya Apache di .NET pakenya IIS Server. IIS Server ini ada versi  gratisnya yaitu IIS Express nah untuk ngejalanin projectnya biasanya otomatis dari visual studio running IIS bila menjalankan program web ASP.NET.

    Web di Microsoft pake ASP.NET nah disini yang baru ane kenal ada namanya ASP.NET Webform jadi buat website bisa drag and drop control misalnya control dropdown yang biasanya harus pake sintax html bisa langsung drag and drop pake komponen asp dimana kita bisa langsung set di propertinya langsung.

    Jadi terasa banget kalau di ASP Webform ini lebih gampang kerasanya karena kita tinggal banyakin set properti doang. Dan ada code behind juga yang untuk mengeset nilai tinggal pake fungsi di C# seperti textNama.Text="Handita". 

    Ada juga konsep satunya namanya ASP MVC yang kalau di dunia web pemprograman PHP seperti framework-framework PHP kayak CodeIgniter ataupun Yii.

    Cuma satu hal yang mungkin kurang seneng waktu develop ASP.NET ini di laptop ane. Komputer ane terasa berat banget waktu running Visual Studio + IIS Express + SQL Express jalan bareng. Gak seperti waktu running Netbean / Eclipse + Apache + MySQL

    Dan satu lagi di ASP kebanyakan request accessnya secara default langsung ke server jadi membuat client terasa berat. Kalau mau ya harus pake semacam JQuery lagi agar accessnya gak ke server terus.
Mungkin sekedar itu aja untuk pengenalan singkat dari ane. Kalau ada pendapat yang salah mohon maaf ane juga lagi belajar. Mungkin bisa dikasih koreksinya. Semoga bermanfaat.

Rabu, 25 Juli 2012

Memberbolehkan code html tertentu dalam posting kita di yiiframework

Bagi yang sering menggunakan kode html kompleks dalam pembuatan websitenya misalnya dalam pembuatan posting komentar dalam blog atau dalam diskusi kita biasanya memperbolehkan semua kode html untuk diposting

Nah untuk menfilter kode html tersebut kita bisa menggunakan Purifier pada yii framework

Contoh penggunaannya adalah sebagai berikut :

$p = new CHtmlPurifier();
$p->options = array('URI.AllowedSchemes'=>array(
  'http' => true,
  'https' => true,
),'HTML.Allowed'=>'a[href],p');
$text = $p->purify($text);

Tinggal dipakai di controller kita variable text tersebut.  Pada kode tersebut html kode yang diperbolehkan adalah link (<a href=""></a>) dan p(<p></p>)

Membuat halaman Under Construction di Yii

Under Construction dipakai untuk menampilkan pesan kalau kita lagi memperbaiki halaman website kita. Nah sekarang ini ane ingin memberikan cara bagaimana kita menambahkan halaman under constuction

Untuk mensiasatinya kita bisa menggunakan script berikut di config main sejajar sama db / name


'catchAllRequest' => 
(file_exists(dirname(__FILE__).'/../../underconstruction.txt')) ? 
die('<div 
style="text-align:center;line-height:300px;font-size:100px;>Under 
Construction</div>'): null,

Nah untuk membuat website kita dalam kondisi perbaikan website tinggal buat file kosong bernama underconstruction.txt di root website kit

Plugin dan Beberapa komponen Untuk Pemrograman Web

Untuk pembuatan website mungkin banyak resource yang kepake untuk membuat tampilan kita supaya lebih menarik dan banyak plugin yang kita bisa pakai diantaranya :
  1. Jquery Mega Menu => Untuk pembuatan menu pada project kita seperti JakartaNotebook
  2. Jquery Hover Card => Untuk pembuatan menu hover kayak sorot di facebook
  3. DDSlick => Dropdown keren pake images dengan jquery
  4. Jquery Lazy Load => Untuk meload resource secara perlahan lahan
  5. Jquery Chat => Membuat chat kayak facebook
  6. Facebook Dropdown => Facebook Dropdown
  7. Jquery Content Hover => Hover card seperti di chrome webstore 
  8. WebSanova => macam macam plugin jquery 
  9. Menu Hover => Macam macam dropdown menu
  10. Slider => Membuat slider gambar scrolling ke kanan
  11. RoundAbout => Membuat gambar memutar 
  12. Portamento=> Membuat panel biar kayak iklan facebook berhenti pada satu titik dan scroll lagi pada bagian tertentu
  13. http://amplifyjs.com/ => Seperti Jquery kumpulan dari request fungsi ajax yang tidak bisa dihandle oleh Jqery
  14. http://benalman.com/projects/jquery-bbq-plugin/  Untuk memberikan fungsi back dan next agar berjalan seperti website biasa pada ajax request yang biasanya tidak bisa pakai tombol back dan next pada browser
  15. http://jscrollpane.kelvinluck.com/ Scrollpane yang lumayan bagus otomatis fokus
  16. http://www.adomas.org/javascript-mouse-wheel/ mendeteksi event mouse
  17. http://jamielottering.github.com/DropKick/ Dropdown keren bisa dipakai untuk membuat kustom dropdown
Tampilan yang bagus juga banyak diantaranya :
  1. Bootstrap Tampilan dari twitter bisa dipake open source
  2. DojoToolkit => Semacam framework interface yang banyak banget resource

CSS Framework
  1. BluePrint
  2. Kube 
Authentication Social
HybridAuth

Kamis, 12 Juli 2012

Select random data dari model / tabel yang kita inginkan di yiiframework

Merandom data terkadang memang diperlukan dalam pembuatan aplikasi kita. Nah disini ane ingin memberikan sedikit tutorial bagaimana kita mengambil data dari table kita secara random sehingga kita dapat mengambil data tersebut secara acak

Nah untuk menangani hal tersebut bisa digunakan contoh query di Yii sebagai berikut :

$models=User::model()->findAll(array(
 'select'=>'*, rand() as rand',
 'limit'=>24,
 'order'=>'rand',
 )
);

Okeh itu aja sebagai penambahan ilmu untuk hari ini.. :)

Rabu, 27 Juni 2012

Tidak Bisa Akses Facebook Di Browser

Mungkin ada diantarta kalian pernah mengalamin masalah seperti saya seperti tidak bisa akses facebook.
Browser hanya menampilkan tidak bisa akses facebook. Website lain bisa diakses dengan baik.

Pertama tama ane coba untuk menghapuskan cookie di browser. Maslah selesai tetapi berlanjut lagi..

Nah untuk menyelesaikan masalah ini masuk ke command prompt. Ketik cmd di start action
Ketikkan perintah berikut:

ipconfig /flushdns
 
Okeh itu skedar berbagi ilmu untuk kali ini

Senin, 18 Juni 2012

Membuat scheduled SMS di Android dengan menggunakan AlarmManager

Bagi android developer yang ingin membuat penjadwalan tertentu suatu activity pasti sudah kenal dengan AlarmManger. AlarmManager ini adalah sebuah kelas di Android yang dapat digunakan untuk melakukan penjadwalan pada waktu tertentu sesuai dengan keinginan kita.

Jika anda biasa menggunakan java mungkin biasanya menggunakan timer. Tetapi di android tidak disarankan menggunakan timer karena memang di Android tergantung dengan posisi handset. Apabila handset tersebut dimatikan kemudian dibuka lagi otomatis akan mati jika kita menggunakan timer.

Kamis, 31 Mei 2012

Menghapus Default Search di Firefox dari program lain

Mungkin salah satu yang membuat jengkel para pengguna browser adalah tergantikannya search engine oleh program yang kita install seperti AVG atau UTorrent Search, Babylon dan masih banyak yang lainnya lagi..



Bagi yang menggunakan firefox mungkin jengkel apabila kita mengetikkan search engine di address bar firefox akan terujuk dengan search engine dari program tersebut misalnya AVG search..

Nah bagi pengguna firefox yang ingin mengganti default search ini bisa masuk Ke "about:config" ketikkan di address bar. Kemudian cari "keyword.url" ganti dengan menggunakan "http://www.google.com/search?ie=UTF-8&oe=utf-8&q="
 Terserah dari temen2 mau diganti dengan default searchnya apa..


Okeh itu tips hari ini semoga bermanfaat


Selasa, 29 Mei 2012

Mengirimkan Email di YiiFramework dengan yii-mail

Mengirimkan email dalam suatu website untuk berinteraksi dengan usernya memang merupakan satu fitur wajib bagi website tersebut.

Nah bagi temen-teman atau pengguna yii yang lain, mungkin pernah mengalami error bagaimana mengirikan email dengan menggunakan php atau yiiframework.

Salah satu error yang muncul jika kita menggunakan perintah mail() dalam php adalah tidak adany mail server yang bisa terhubung.
Error yang keluar mungkin seperti ini :


mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() 

Itu dikarenakan di localhost tidak ada mail server sehingga tidak bisa mengirimkan email untuk mengirimkan email ini anda harus menginstall mail server dulu di local. Salah satunya adalah hMailServer.

Atau jika kita tidak bisa menggunakan server lokal kita bisa menggunakan email lain dengan setting SMTP dari email tersebut.

Memotong kata yang panjang di PHP

Bagi yang bermasalah dengan kata-kata yang terlalu panjang kemudian pengen memberikan memotong kata tersebut dengan ketentuan berapa huruf yang boleh mungkin kode di bawah ini bisa membantu


$str=preg_replace('/(\S{30,})/e', "wordwrap('$1', 30, ' ', true)
Kode di atas digunakan untuk memotong kata jika lebih dari 30 huruf diubah ditambahkan dengan spasi.. Jika ingin diganti dengan kata lain silahkan ganti di parameter kedua wordwrap..

Nah jika ingin memotong pada suatu tempat misalnya "Selamat datang di Techno Source Code Tutorial Website" menjadi "Selamat Datang di Techno Source ..."

bisa menggunakan fungsi berikut :

function gen_string($string,$max=20)
{
    $tok=strtok($string,' ');
    $string='';
    while($tok!==false && strlen($string)<$max)
    {
        if (strlen($string)+strlen($tok)<=$max)
            $string.=$tok.' ';
        else
            break;
        $tok=strtok(' ');
    }
    return trim($string).'...';
}





Semoga bermanfaat

Kamis, 24 Mei 2012

Menggunakan Mysql Query Browser di Ubuntu

Memperbaiki sock error di xampp ubuntu.

Mungkin bagi kalian yang pengen menggunakan mysql query browser dengan menggunakan Xampp sebagai development tool menemukan error socket mysql tidak terkonfigurasi dengan baik

Nah untuk memperbaikinya kita dapat memberikan perintah sebagai berikut:

  • $ sudo mkdir /var/run/mysqld
  • $ cd /var/run/mysqld
  • $ sudo ln -s /opt/lampp/var/mysql/mysql.sock mysqld.sock
     
  • Yup dengan perintah tersebut socket yang awalnya error kita dapat berjalan dengan lancar lagi

    Selasa, 08 Mei 2012

    Error waktu loading tiny mce di server Internal Server Error YiiFramework

    Setelah 3 hari mencari solusi untuk masalah ini akhirnya ketemu juga untuk penanganan error tiny mce yang gak mau ngeload di server.

    Setelah googling - googling ketemu juga akhirnya..

    Error yang terlihat di firebug seperti ini

    "NetworkError: 500 Internal Server Error - http://example.com/assets/96646869/tiny_mce/tiny_mce_gzip.php?js=true&diskcache=true&core=true&suffix=&themes=advanced&plugins=safari%2Cpagebreak%2Cstyle%2Clayer%2Ctable%2Csave%2Cadvhr%2Cadvimage%2Cadvlink%2Cemotions%2Cspellchecker%2Cinlinepopups%2Cinsertdatetime%2Cpreview%2Cmedia%2Csearchreplace%2Cprint%2Ccontextmenu%2Cpaste%2Cdirectionality%2Cfullscreen%2Cnoneditable%2Cvisualchars%2Cnonbreaking%2Cxhtmlxtras%2Ctemplate&languages=en" 

    Nah untuk menyelesaikan masalah ini ternyata simple dengan mengubah permission dari file tersebut ke 755.

    Jangan lupa untuk foldernya juga dari mulai asset/96646869/tiny_mce

    Semuanya ubah permissionnya ke 755...

    Yup itu aja.. semoga memberikan info dan ilmu...

    Selasa, 01 Mei 2012

    Cara membuat CStarRating di yiiframework

    Pada kesempatan kali ini ane ingin memberikan sedikit tutorial bagaimana  kita membuat rating dengan menggunakan CStarRating di yiiframework.

    Nah langsung saja bagaimana kita dapat membuat widget ini berfungsi dengan baik lihat kode di bawah ini yang ane letakkan di view ane


    <div class="rate-info">
     Yang ini untuk info aja kalo kita sudah merate 
    </div> 
    <div class="rate-isi">
    Ini digunakan untuk menampilkan banyaknya rate dan voting 
    </div>
    <?php 
     $this->widget('CStarRating',array(
     'name'=>'rating', // an unique name
     'id'=>'rate-id',
     'starCount'=>10,
     'readOnly'=>false,
     'resetText'=>'',
     'value'=>round($rating['rata'],0),//nilai ini diambil dari database rating kita 
     'callback'=>' // Yang ini digunakan untuk aksi kita
     function(){
      url = "'.$this->createUrl('controllerId/create').'"
      jQuery.getJSON(url, {id: '.$model->id_object.', val: $(this).val()}, function(data) {
       if (data.status == "success"){
        $(".rate-info").html(data.info);
        $(".rate-isi").html(data.isi);
        var pause = setTimeout("$(\".rate-info\").fadeOut(\"slow\")",5000);
        $("input[id*=rate-id_]").rating("readOnly",true);
       }
      });}'
     ));
    <?php 
    Nah selanjutnya adalah controller dimana kita meletakkan aksi kita untuk mengirim datanya

    Jumat, 20 April 2012

    Mereset Form dengan menggunakan Jquery

    Pada kesempatan kali ini ane ingin memberikan tutorial bagaimana caranya untuk mereset form yang telah kita isi dengan menggunakan javascript.

    Pada kesempatan ini ane ingin menggunakan jquery :

    <form id="myform" action="/action.php">
    <input name="text" type="button"/> 
    <textarea name="textarea1" ></textarea> 
    </form>
     
    
    Nah pada button yang digunakan untuk mereset kasih kode javascript sebagai berikut :

    $(":input","#myform")
    .not(":button, :submit, :reset, :hidden")
    .val("")
    .removeAttr("checked")
    .removeAttr("selected");
    

    Biasanya dipakai waktu submit

    Bagi yang menggunakan CLE editor mungkin ada perbedaan sedikit waktu mereset form..

    postContentClr = $("iframe").contents().find("body");
    postContentClr.html("");
    

    Rabu, 18 April 2012

    Menampilkan halaman terakhir di clistview atau cgridview yii

    Pada kesempatan kali ini ane ingin memberikan tutorial bagaimana caranya menampilkan pagination untuk diset pada halaman terakhir di yiiframework sebagai halaman default dari clistview atau cgridview. Nah untuk membuatnya cukup mudah tinggal dimodifikasi untuk dataprovider yang kita gunakan.

    langsung saja ke contoh kode yang akan kita gunakan  di controller

    if(Yii::app()->request->isAjaxRequest){
     $dataProvider=new CActiveDataProvider('KomentarThread',array(
       'criteria'=>array(
         'condition'=>'ID_THREAD=:id_thread',
         'params'=>array(':id_thread'=>$model->ID_THREAD)
       )
     ));
     $p=$dataProvider->pagination;
     $p->setItemCount($dataProvider->getTotalItemCount());
     $p->currentPage=$p->pageCount-1;
     $this->renderPartial('/komentarThread/_comments_all',array(
       'all_komentar'=>$dataProvider)
       ,false,true);
     Yii::app()->end();
    }
    

    Nah bagian $p itu adalah variabel untuk mengesetnya..

    Selasa, 17 April 2012

    Membuat Captcha di yiiframework

    Mungkin tidak afdol tentang posting saya yang sebelumnya tentang membuat validasi captcha dengan ajax pagination true disini tetapi saya belum memposting bagaimana cara membuat captcha di yii framework

    Nah pada kesempatan ini ane ingin memberikan sedikit tutorial bagaimana cara membuat captcha di yiiframework. Tetapi yang ini hanya bisa digunakan jika ajax validationnya di set ke false ya..

    Oke langsung saja :
    1. Buat di form nya seperti ini
      <?php if(extension_loaded('gd')): ?>
       <div class="row">
        <?php echo $form->labelEx($model,'verifyCode'); ?>
        <div>
         <?php $this->widget('CCaptcha'); ?>
         <?php echo $form->error($model,'verifyCode'); ?>
         <?php echo $form->textField($model,'verifyCode'); ?>
        </div>
      
       </div>
       <?php endif?>
      
      
    2. Tambahkan field verifyCode ke model
      public class User{
         public $verifyCode;
       
    3. Terus kasih rules di model
      array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()),
      
    4. buat action di controllernya
      public function actions(){
        return array(
          // captcha action renders the CAPTCHA image displayed on the contact page
          'captcha'=>array(
            'class'=>'CCaptchaAction',
            'backColor'=>0xFFFFFF,
            
          ),
        
        );
       }
      

    Rabu, 11 April 2012

    Membuat captcha dengan ajax validation true di yiiframework

    Biasanya kalau menggunakan captcha di yiiframework kita biasa menggunakan ajax validation false. Tetapi apabila ajax validation bernilai true maka captcha tersebut tidak dapat berfungsi dengan baik lagi. Nah bagaimana cara menangani masalah tersebut langsung saja kita bahas kali ini.

    Nah awalnya kan form seperti ini di view


    <div class="form">
    
    <?php $form=$this->beginWidget('CActiveForm', array(
     'id'=>'user-form',
     'enableAjaxValidation'=>false,
            'htmlOptions'=>array('enctype'=>'multipart/form-data'),
    
    )); ?>
    
     

    Kamis, 05 April 2012

    Url di yii framework

    Mungkin masih bingung dengan standar url di yii framework mari kita bahas sekarang.
    Url dari yii misalnya kita dapatkan contoh sebagai berikut :

    FULL URL ==> http://www.example.com:8080/project/index.php?r=post/view&id=123
    
    PROPERTY
    hostInfo   http://www.example.com:8080
    port                              8080
    baseUrl           /project
    url               /project/index.php?r=post/view&id=123
    requestUri        /project/index.php?r=post/view&id=123
    scriptUrl         /project/index.php
    queryString                         r=post/view&id=123
    scriptFile        /var/www/html/project/index.php

    Anda dapat mengakses informasi dari url tersebut dengan kode sebagai berikut :

    Yii::app()->request->hostInfo;
    Yii::app()->request->port; 
    Yii::app()->request->baseUrl;
    Yii::app()->request->url; //dan properti lainnya

    Oke itu saja. Semoga menambah ilmj

    Selasa, 03 April 2012

    Membuat CJuiAutoComplete dengan banyak pilihan

    Di versi yii 1.1.3 widget CAutoComplete sudah deprecated, jadi untuk hasil yang lebih baik anda disarankan menggunakan CJuiAutoComplete.

    Nah untuk membuat widget ini di yii lumayan mudah. Tetapi masalahnya jika mau membuat CJuiAutoComplete dengan menggunakan lebih dari satu pilihan nah itu yang akan kita bahas pada artikel kali ini.

    Oke anggap kode dari viewnya ada di sini  /protected/views/article/_form.php. Dan saya hanya punya 2 table yang ada di database id_tag and name. Nah ini nantinya akan ane simpan dalam model Tag. Langsung saja bagaimana caranya kita membuat CJuiAutoComplete pada yii

    Rabu, 07 Maret 2012

    Menambahkan nomor di CListview di yii

    Menambahkan penomoran otomatis di dalam Clistview di yii dapat dilakukan dengan mudah.
    Dengan menggunakan variabel index yang dilempar pada waktu kita membuat Clistview kita dapat dengan mudah menambahkannya.

    Tambahkan saja variabel $index pada  _view yang digunakan pada Clistview


    <div class="view" >
     <i><b><?php echo CHtml::encode($data->getAttributeLabel('Project title')); ?>:</b></i>
     <span class="info">
     <?php echo $index+1;?>//this is the variable in CListView
     </span>
     <h3><?php echo CHtml::link(CHtml::encode($data->title), array('view', 'id'=>$data->project_id)); ?></h3>
    
    
    Nah pada halaman index file anda di yii dapat anda lihat kodenya sebagai berikut :


    <h1>Projects</h1>
    
    <?php $this->widget('zii.widgets.CListView', array(
     'dataProvider'=>$dataProvider,
     'itemView'=>'_view',
    )); ?>
    

    Selasa, 06 Maret 2012

    Menambahkan widget ke dalam widget di yii


    Pada kesempatan ini ane ingin memberikan sedikit penjelasan bagaimana kita dapat menambahkan widget di dalam widget di yii framework

    Oke langsung kita lihat bagaimana kita bisa membuat widget di yii dengan konsep sebagai berikut :

      $this->widget('ext.xxx.yyy',array(...)); 
    
    Fungsi widget ini nantinya sudah mengeksekusi dalam bentuk string yang telah di echo dalam yii framework. Padahal di dalam widget yang kita inginkan kita ingin memberikan kembalian berupa string value.
    Oleh karena itu kita akan membuat dengan bantuan fungsi dari ob_start().  dimana kita dapat menyimpan hasilnya ke dalam sebuah variabel terlebih dahulu.


    Pada kesempatan kali ini ane ingin memberikan contoh untuk memberikan bagaimana kita dapat membuat cjuislider di dalam cdetaillistview..

    Kamis, 23 Februari 2012

    Sharing files dan folder dengan 2 komputer langsung menggunakan wifi

    Yup menyambung artikel sebelumnya di sini sharing files dan folder menggunakan routers connection, Sekarang yang akan ane bahas jika kita ingin menggunakan ad hoc connection artinya kita ingin sharing langsung dengan menggunakan 2 komputer langsung tanpa menggunakan routers artinya kita sebagai penyedia wireless connection.

    bagi yang belum lihat artikel saya sebelumnya mungkin bisa dilihat dulu pda link yang ane kasih di atas tadi. Langsung saja pada komputer servernya  Pilih Open Network and Sharing Center..

    Setelah itu pilih Set up a wireless ad hoc

    Sharing files dan folder menggunakan windows 7 dengan wifi routers

    Yup artikel ini ane tulis sebagai bahan pengingat aja nanti bila suatu saat lupa. Nah pada kesempatan kali ini ane ingin memberikan sedikit tips untuk melakukan sharing folder ataupun files dengan menggunakan wifi. Mungkin banyak yang jarang memanfaatkan fitur ini karena mungkin masih terpaku pada "Pinjam flashdisk dong..." dan kata2 sejenisnya..

    Oke langsung saja tutorial pada kesempatan kali ini ada 2 jenis koneksi yang akan ane share
    1. Koneksi wifi dengan router sendiri (connect pada jaringan yang sama)
    2. Koneksi add hoc antara 2 komputer langsung

    Yups langsung saja ke tutorial yang dengan router dulu.. Nanti koneksi add hoc di post yang lain kepanjangan soalnya...
    Gambar ini ane dapat dari addictive.com..
    Pilih wireless untuk koneksi bareng dulu misalnya Nakodari wireless...

    Nah setelah terkoneksi buka Open Network and Sharing Center kemudian tampak gambar seperti di bawah ini

    Rabu, 22 Februari 2012

    Membuat checkbox dengan fungsi ajax di yiiframework

    Pada kesempatan ini ane ingin memberikan sedikit penjelasan menggnakan checkbox untuk digunakan sebagai komponen untuk memuat data dari url suatu controller dalam model kita. Nah untuk mendapatkan ini di yii sudah disediakan fungsi CHtml::checkbox atau CHtml::activeCheckbox.Agar dapat diberikan fungsi ajax kita dapat memberikan property ajax di dalam html optionnya. Tetapi setelah digunakan checkbox tersebut tidak dapat diklik nah ini masalah yang muncul karena pada waktu mengenerate code yii membuat fungsi di akhir statement javascript dengan return false, yang membuat checkbox ini tidak dapat dicheck.

    Oleh karena itu kita dapat menggunakan salah satu cara dengan menggunakan modifikasi dari skrip kita sendiri.. Contoh yang ane implementasikan dapat dilihat sebagai berikut : (view)


    <?php echo CHtml::checkBox("load_ajax",false,array('id'=>'load_risk_all'));echo "Load All Risk Child";
    $url=CController::createUrl('project/vieweach',array('project_id'=>$model->project_id));
    Yii::app()->clientScript->registerScript("check",
               '$("#load_risk_all").change(function(){
                 if($(this).is(":checked")){
                  $("#load_risk").load("'.$url.'");
                  $("#load_risk").fadeIn();
                 }else{
                  $("#load_risk").html("");
                 }
                 })
              ',
               CClientScript::POS_READY);
    
    ?>
    <div id="load_risk">
    </div>
    

    Dan pastikan bahwa pada waktu memanggil url yang kita inginkan tersebut kita menggunakan fungsi renderPartial agar html yang kita inginkan sesuai. Kita juga dapat mengganti fungsi load() dengan menggunakan fungsi jquery $.ajax apabila kita ingin mengirimkannya berserta data kita. Bisa diihat di controller kita di ProjectController misalnya jangan lupa untuk menambahkan rules untuk hak aksesnya..
    public function accessRules()
        {
            return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                    'actions'=>array('index','view','vieweach'),//tambahkan view each disini
                    'users'=>array('@'),
            ),
    

    Nah ini untuk controllernya

    public actionViewEach($project_id){ 
      $criteria=new CDbCriteria();
      $criteria->addColumnCondition(array('project_id'=>$project_id)); 
      $provider=new CActiveDataProvider('Project',array('criteria'=>$criteria));
      $this->renderPartial('/risk/view_each',array('provider'=>$provider),false,true);
    } 


    Anda juga dapat menggunakan onChange pada property html di checkbox untuk memberikan fungsi javascirpt anda sendiri

    <?php echo CHtml::checkbox("load risk",false,array("onChange"=>"js:yourcustomfunction()")); ?> //jangan lupa untuk meregister yourcustomfunction menggunakan registerScript
    
    
    Selamat mencoba

    Membuat dropdown list di yiiframework


    Pada kesempatan kali ini ane ingin memberikan tutorial bagaimana kita dapat membuat dropdown list dengan mudah di yii framework


    Pada yiiframework telah diberikan fungsi sebagai berikut yaitu CHtml::dropdownListbox

    Pada kasus kali ini anggap anda mempunyai tabel sebagai berikut


    country_name | id
    Indonesia        | 1
    USA               | 2


    Dan anda ingin membuat tampilan dropdown dengan menggunakan tabel tersebut sebagai dasar dalam membuat dropdown menu. Masuk ke view di _form anda kemudian tambahkan kode sebagai berikut..
           <div class="row">
      <?php echo $form->dropDownList($model,'country_id',
       CHtml::listData(Country::model()->findAll(), 'id', 'country_name'),
       array('empty'=>'Select Country'))?>
     </div>
    
    Yup itu aja yang ditambahkan untuk membuat dropdown list di yii

    Kamis, 16 Februari 2012

    Menambahkan dan mengurangi date di php

    Yang sering memakai php mungkin bagi yang belum tahu nih ada cara bagaimana kita dapat menambahkan hari ataupun minggu ke dalam sebuah variabel date yang kita miliki..

    Nah kali ini ane ingin membahasnya bagaimana caranya kita dapat mendapatkan hasil yang kita inginkan.
    Langsung saja

    $date = "2012-02-16";
    $newdate = strtotime ( '-3 day' , strtotime ( $date ) ) ; //mengurangi 3 hari hasilnya 2012-02-13
    $newdate2 = strtotime ( '+3 week' , strtotime ( $date ) ) ;//menambahkan 3 minggu 
    $newdate3 = strtotime ( '-3 year' , strtotime ( $date ) ) ;//mengurangi 3 tahun
    $newdate = date ( 'Y-m-j' , $newdate ); //untuk menyimpan ke dalam variabel baru
    echo $newdate;
    

    Contoh lain

    $d = mktime(0,0,0,$month,$day,$year);
    $end_date = date("Y m d",strtotime("+2 days",$d));
    //To add days to current date
    date('Y-m-d', strtotime("+2 days"));
    
    

    YUp itu aja sekedar tulisan hari ini

    Rabu, 15 Februari 2012

    Membuat fungsi yang dipakai semua controller pada yii

    Sedikit tips saja bagi yang sering menggunakan yii..

    Jika kita menggunakan fungsi yang sering diulang - ulang misalnya dalam sebuah datepicker dengan menggunakan CJuiDatePicker pastinya kita akan  menuliskan menggunakan dengan seperti ini :


    $this->widget('zii.widgets.jui.CJuiDatePicker',
     array(
      // you must specify name or model/attribute
      //'model'=>$model,
      //'attribute'=>'projectDateStart',
      'name'=>'Project[projectDateStart]',
    
      // optional: what's the initial value/date?
      //'value' => $model->projectDateStart
      'value' => '08/20/2010',
    
      // optional: change the language
      //'language' => 'de',
      //'language' => 'fr',
      //'language' => 'es',
      'language' => 'pt-BR',
    
      /* optional: change visual
       * themeUrl: "where the themes for this widget are located?"
       * theme: theme name. Note that there must be a folder under themeUrl with the theme name
       * cssFile: specifies the css file name under the theme folder. You may specify a
       *          single filename or an array of filenames
       * try http://jqueryui.com/themeroller/
      */
      'themeUrl' => Yii::app()->baseUrl.'/css/jui' ,
      'theme'=>'pool', //try 'bee' also to see the changes
      'cssFile'=>array('jquery-ui.css' /*,anotherfile.css, etc.css*/),
    
    
      //  optional: jquery Datepicker options
      'options' => array(
       // how to change the input format? see http://docs.jquery.com/UI/Datepicker/formatDate
       'dateFormat'=>'mm/dd/yy',
    
       // user will be able to change month and year
       'changeMonth' => 'true',
       'changeYear' => 'true',
    
       // shows the button panel under the calendar (buttons like "today" and "done")
       'showButtonPanel' => 'true',
    
       // this is useful to allow only valid chars in the input field, according to dateFormat
       'constrainInput' => 'false',
    
       // speed at which the datepicker appears, time in ms or "slow", "normal" or "fast"
       'duration'=>'fast',
    
       // animation effect, see http://docs.jquery.com/UI/Effects
       'showAnim' =>'slide',
      ),
    
    
      // optional: html options will affect the input element, not the datepicker widget itself
      'htmlOptions'=>array(
      'style'=>'height:30px;
       background:#ffbf00;
       color:#00a;
       font-weight:bold;
       font-size:0.9em;
       border: 1px solid #A80;
       padding-left: 4px;'
      )
     )
    );
    
    

    Minggu, 12 Februari 2012

    CodeIgniter vs YiiFramework

    Sekedar opini aja dari penulis setelah bermigrasi dari CodeIgniter terus ke Yiiframework.

    Judulnya

    Codeigniter vs YiiFramework

    Kedua duanya merupakan framework php yang sangat bisa membantu kita dalam mendevelop aplikasi web kita. Tetapi beberapa perbedaan yang signifikan yang ane temukan adalah :

    1. YiiFramework menggunakan konsep generate code
      Nah fitur ini yang membuat ane kepincut pada framework yang satu ini salah satu fitur yang sangat mempercepat kerjaan kita. Kita tinggal gunakan GII yang ada pada yiiframework dan dalam sekejap kita dapat membuat Controller, Model, bahkan fungsi CRUD secara sekaligus dengan menggunakan alat ini. Sampai ke fungsi paging halaman update dan validasi juga digenerate dari deklarasi kita waktu kita buat dengan menggunakan GII. Hal yang harus dibayar kerja keras kalau kita harus membuat di CodeIgniter dimana kita masih harus membuat satu per satu dari masing - masing bagian MVC berikut.
    2. YiiFramework telah diintergrasikan dengan aspek security yang baik
      Nah fitur ini juga yang membuat yii terasa lebih bagus. Dari mulai untuk pencegahan SQL-injections, XSS attact apalah ane juga kurang ngerti bahkan untuk fungsi login pun udah ditanganin ama yii ini. Kita tinggal lihat sample blog applications kita dapat membuat halaman login beserta sessionnya secara cepat, hal yang tidak mudah apabila kita gunakan CodeIgniter.
    3. CodeIgniter dokumentasinya lebih baik
      Nah ini nih yang ane masih bisa nilai + untuk codeigniter, dokumentasinya dapat dibaca dengan baik sampai mempraktikannya ke latihan. Untuk yiiframework sendiri dokumentasinya banyak tetapi waktu masuk untuk mempraktikannya kadang masih bingung dan harus cari ke forum dulu baru ketemu jawabannya. Mungkin karena banyaknya fungsi yang ada di yiiframwork mungkin ya.. jadi gak kebahas satu per satu. Tetapi satu nilai plus untuk yii komunitasnya semakin bertambah besar. Jadi jangan malu malu untuk bertanya..
    4. Yiiframework seneng banget pake Array
      Jadi yang terbiasa pake yii jangan heran nantinya akan dihadapkan pada banyak array yang kita gunakan. Jadi pahami lebih mendalam tentang array low mau pake yii ini
    5. Yiiframework banyak widget yang langsung bisa digunakan
      Ini juga fitur yang dapat kita pakai kalo kita menggunakan yii. Kita dapat dengan mudah menggunakan widget - widget yang telah diintergrasikan dengan jquery dan jqueryui termasuk jquery autocomplete, datepicker, treeview yang diimplementasikan pada beberapa widget di  yii seperti CAutoComplete, CJuiDatePicker, CMenu, CPortlet, CJuiButton dan apalagi banyak extensions yang sangat membantu dalam membuat pekerjaan
    6. Kekurangan YiiFramework
      Nah ini nih yang mungkin ane rasain kekurangannya sendiri menurut ane framework ini kurang begitu cocok untuk pemula, karena biasanya pemula belum tahu dasar dari phpnya atau untuk urusan yang belum pernah menyentuh CSS,Javascript, ataupun html secara langsung biasanya nanya terus ke forum untuk mencari solusi yang diinginkan. Padahal kalo kita mengerti alurnya kita dapat memodifikasi sendiri yang kita inginkan. Tetapi gak apa apa mungkin bisa sambil belajar kan bisa belajar dasarnya juga kan.. Dan seringnya kalo make yiiframework terjadi bentrok CSS yang kita inginkan jadi pandai - pandai menentukan CSS yang belum ada pada yiiframework kita..

    It's just my opinions, Jika punya pandangan lain monggo dibahas.. mungkin ane ada yang salah bisa sharing ilmu lagi nanti CMIIW... ^^

    Memakai Emultiselect di yiiframework

    Yaps akhirnya ane make YiiFramework juga. Setelah temen - temen ane yang make framework ini udah banyak dan baru sekarang ane make and then terbukti membuat ane terpesona dengan smua fungsi yang ada di Yiiframework..

    Coz udah banyak sample coding yiiframework di tempat blog temen ane di sabitlabscode.wordpress.com. Sekedar nambahin aja biar gak lupa dikemudian hari makanya ane publish disini..

    Langsung saja pada kesempatan kali ini ane ingin membuat post tentang bagaimana cara membuat tampilan multiple selections dengan menggunakan dropdown list di yii..

    Lihat bagaimana hasil yang kita inginkan nantinya seperti ini..

    http://www.yiiframework.com/extension/emultiselect/

    Nah untuk membuat tampilan pilihan pada gambar seperti diatas download extensi pada url yang ane kasih di atas. Kemudian extract isinya ke protected/extensions/ . 

    Nah untuk menggunakannya sangatlah mudah tinggal tambahin kode pada view form anda sebagai berikut ini.

    <?php $this->widget('application.extensions.emultiselect.EMultiSelect',
                array('sortable'=>true/true, 'searchable'=>true/true));?>
    

    dan kemudian tambahkan class multiselect ke dalam dropdwonlist anda

    <?php echo $form->dropDownList(new TProjectHasTUnit(),'unit_id_FK',$list,
           array('multiple'=>'multiple',
           'key'=>'unit_id', 'class'=>'multiselect')
         ); ?>


    Note :


    Nah untuk yang update kan harus ngeload dulu data yang kita pilih sebelumnya.. Kemudian bagaimana caranya untuk menampilkannya kembali butuh sedikit modifikasi kode agar yang terseleksi terpilih dengan benar waktu perintah update nantinya..

    Untuk menggunakan ini ane kasih sample code yang ane pakai


    <?php $this->widget('application.extensions.emultiselect.EMultiSelect',
                array('sortable'=>true/true, 'searchable'=>true/true));
        $m=TUnit::model()->findAll();
        $list=CHtml::listData($m,'unit_id','name');
        if($model->isNewRecord){
         echo $form->dropDownList(new TProjectHasTUnit(),'id_unit_kerja_FK',$list,
           array('multiple'=>'multiple',
           'key'=>'unit_id', 'class'=>'multiselect')
         );
        }else{
         
         $selected_scope=TProjectHasTUnit::model()->findAllByAttributes(array('project_id_FK'=>$model->project_id));
         $selected_key_scope=array();
         foreach ($selected_scope as $val){
          $selected_key_scope[]=$val->id_unit_kerja_FK;
         }
         echo $form->dropDownList(new TProjectHasTUnit(),'id_unit_kerja_FK',$list,
           array('multiple'=>'multiple',
                 'key'=>'unit_id', 'class'=>'multiselect','options'=>$this->createOptions($selected_key_scope))
         );
        }
      ?>

    Jangan lupa untuk menambahkan fungsi $this->createOptions() di protected/components/Controller.php untuk dapat digunakan ditempat lainnya



    public function createOptions($arraySelectedValue){
      $selected_attr=array('selected'=>'selected');
      $all=array();
      foreach($arraySelectedValue as $val){
       $all["$val"]=$selected_attr;
      }
      return $all;
     }
    
    
    Sip itu dulu post yiiframework pertama ane.. Maklum buat posting kalo lagi ada yang mau dishare aja..

    YII isROck

    Jumat, 13 Januari 2012

    Android Custom Komponen dan Code dari Github

    Dari googling - googling akhirnya nyasar ke salah satu project di github yang sangat membantu dalam pekerjaan ane dalam mengembangkan aplikasi android. Nah beberapa project yang berhasil ane temukan dapat dilihat pada daftar di bawah ini :


    1. - https://github.com/chrisbanes/Android-PullToRefresh

      Nah ini yang sering kita lihat pada aplikasi twitter dan facebook sekarang. Untuk menggunakan komponen ini tinggal klik aja linknya