Selasa, 01 Mei 2012

implementasi datatables di codeigniter

menggunakan plugin datatables pada codeigniter kini semakin mudah, karena sudah ada library khusus codeigniter :))

asumsi :
- sudah install xampp
- sudah install codeigniter
-sudah install jquery
- sudah install file2 datatables di codeigniter

file yang dibutuhkan:
- library Datatables: datatables.php

berikut langkah2nya :
- buat database dan tabel beserta isinya. contoh saya membuat tabel obat:
- lalu set database name sesuai dengan nama database yang kamu buat di 'application/config/database.php

- buat file controller dgn nama misal 'testControl' dengan isi sebagai berikut:

<?php
 class testControl extends CI_Controller
 {
    function view_obat()
  {
   $this->load->view('view_obat');
  }
    function ajax_view_obat()
  {
   $this->load->library('Datatables');
   $this->datatables->from('obat');
   $this->datatables->select('kode_obat,nama_obat,kode_satuan,kode_supplier');
   echo $this->datatables->generate();
  }
 }
//end of file testControl


 - buat view dengan nama 'view_obat' dengan isi sbb:
<head>
 <script type="text/javascript" src="<?php echo base_url();?>lib/js/jquery-1.4.4.min.js"></script>
 <script type="text/javascript" src="<?php echo base_url();?>lib/js/jquery.dataTables.js"></script>
  <link rel="stylesheet" type="text/css" media="screen" href="<?php echo base_url(); ?>lib/css/demo_table_jui.css"/>
   <link rel="stylesheet" type="text/css" media="screen" href="<?php echo base_url(); ?>lib/css/demo_table.css"/>
</head>
<body>
 <h2>data obat</h2>
 <hr>
 <table id="tbl"  cellpadding="0" cellspacing="0" border="0" class="display" >
  <thead>
   <tr>
    <th>kode obat</th>
    <th>nama obat</th>
    <th>kode satuan</th>
    <th>kode supplier</th>
   </tr>
  </thead>
  <tbody>
   <tr>
    <td colspan="5" class="dataTables_empty">Loading data from server</td>
   </tr>
  </tbody>
  <tfoot>
   <tr>
   </tr>
  </tfoot>
 </table>
  <script type="text/javascript" charset="utf-8">
  $(document).ready(function() {
   $('#tbl').dataTable( {
    "bProcessing": true,
    "bServerSide": true,
    'sPaginationType': 'full_numbers',
    "sAjaxSource": "<?=base_url()?>index.php/testControl/ajax_view_obat/",
    "aaSorting": [[ 0, "desc" ]]
   } );
  } );  </script>
 </body>
- dan hasilnya sebagai berikut:

- selesai, selamat mencoba :))

25 komentar:

  1. dan modelnya kemana???? tak tunggu lo mas filenya

    BalasHapus
    Balasan
    1. sebenernya ini hanya contoh sederhana saja, tidak menerapkan konsep NVC pada codeigniter itu sendiri,
      kalo misal ingin menerapkan itu tinggal pindahkan fungsi ajax_view_obat() yang ada di controller ke model, echo diganti return, dan buat fungsi di controller utk memanggil fungsi model tersebut, lalu echo

      Hapus
    2. buat memanggil fungsi model nya gimna ya?

      Hapus
  2. mas itu nyimpen library Datatables di floder yang mana?
    terimakasih

    BalasHapus
  3. mas, gimana cara nambah tombol edit dan delete pada stiap row datatables nya?????

    BalasHapus
    Balasan
    1. pake fungsi 'add_column()', diletakkan di controller setelah '$this->datatables->select();'
      contohnya:

      $this->datatables->add_column('a', '<a href="'.base_url().'admin/del_obat/$1"', 'kode_obat , delete');

      $1 akan digenerate menjadi kode_obat pada tiap baris, $2 akan diganti menjadi tulisan delete.

      monggo di coba

      Hapus
    2. $this->datatables->add_column('a', '<a href="'.base_url().'admin/del_obat/$1"', 'kode_obat , delete');
      tulisan $2 dari mana ? setelah admin/del_obat/$1/$2 kaya konsep .httacess?

      Hapus
    3. maaf itu kurang lengkap codenya, yang bener:
      $this->datatables->add_columnundefined'a', '<a href="'.base_url().'admin/del_obat/$1">$2</a>', 'kode_obat , delete');
      atau tanpa menggunakan $2 pun bisa:
      $this->datatables->add_columnundefined'a', '<a href="'.base_url().'admin/del_obat/$1">delete</a>', 'kode_obat');

      Hapus
  4. saya sudah mengikuti langkah2 diatas akan tetapi kenapa yang muncul hanya tulisan "Processing..." begitu saja tetapi hasil select database tidak muncul?mohon pencerahan, terima kasih.

    BalasHapus
    Balasan
    1. cek database nya ??
      coba di var dump hasil function ajax_view_obat()

      localhost/namaweb/namacontroller/namafunction

      Hapus
    2. iya betul, coba di cek databasenya, atau langsung aja ubah urlnya '/view_obat' jadi '/ajax_view_obat' nanti keluar json scriptnya

      Hapus
  5. bagaimana klo data tersebut berjumlah 50 rb record ?? klo datatables ini kan mengambil semua record kemudian di generate ( paging ) ulang , klo datanya sedikit its ok ga masalah tp klo datanya buanyak gmn ??? browser bakal HANG ..hhe
    saran: buat tutorial lanjutan dari seri ini :D
    keep share bro

    BalasHapus
    Balasan
    1. belum pernah nyoba c, cuma udah pake option bserverside:true di codingan ini, penjelasan lengkapnya cek di http://datatables.net/usage/server-side

      Hapus
    2. terimakasih atas sarannya (",)b

      Hapus
  6. g klo pake mekanisme seperti ini soalnya di jalankan di belakang server saya ada data 2000 baris dan tidak masalah

    BalasHapus
  7. trimakasih atas reviewnya (",)b

    BalasHapus
  8. Mas kalo ngasih nomor urut gimana.. terima kasih

    BalasHapus
    Balasan
    1. ubah kode:
      $this->datatables->select('kode_obat,nama_obat,kode_satuan,kode_supplier');
      jadi:
      $this->datatables->select('(@cnt := @cnt + 1) AS rowNumber, kode_obat,nama_obat,kode_satuan,kode_supplier');

      counting incrementnya lewat mysql,

      Hapus
  9. ini klo datanya ribuan lemot gak?

    BalasHapus
    Balasan
    1. tidak, karena sudah menggunakan server-side processing untuk penjelasan lebih jelasnya : https://www.datatables.net/examples/data_sources/server_side.html

      Hapus
  10. Sangatt bermanfaat gan... semoga berkah ilmunya... aamiin

    BalasHapus
    Balasan
    1. Komentar ini telah dihapus oleh pengarang.

      Hapus
  11. Mas, kalau pake codeigniter 3 gimana caranya ya. Saya coba yang ini kok ndak bisa. Thks.

    BalasHapus
  12. mas kalo mau nambahin link untuk edit/delete gimana ? thx sebelumnya sangat membantu

    BalasHapus