Membuat Class Table Sendiri Dengan PHP


Membuat class table sendiri di PHP

kali ini saya akan share turorial cara membuat class Table sendiri di PHP, class table ini nantinya akan di gunakan untuk membuat table secara Mudah, Cepat dan sangat membantu ada ketika membuat data berupa table
class Table umumnya terdapat dalam beberapa framework di PHP di antaranya Codeigneter, Yii dan masih banyak juga yang lainnya, tapi bagi anda yang tidak menggunakan framework atau masih menggunakan code PHP biasa tentu membuat table dengan cara manual, pertama membuat tag table terlebih dahulu kemudian buat tag record dan bla bla bla... dan seterusnya, itu membuat waktu seditkit terbuang karena jika ingin nemampilkan data dalam table, anda harus membuat tag table terlebih dahulu, kemudan buat script yang akan nemanpilkan data dalam table tersebut, nah mungkin dengan anda membuat class table ini bisa mempersingkat waktu yang dibutuhkan ketika anda membuat sebuah table.
ok dari pada bertele tele hehe, kita langsung saja ke pembahasan, seperti biasa dalam tutorial tutorial yang saya berikan buat projek dengan nama terserah anda, lalu buat file dengan nama Table.php simpan di dalam projek yang sudah anda buat kemudian salin kode class table di bawah ini, atau anda bisa mendownload class table tersebut disini
<?php
/*
 * Creator: Mochamad Rohmat
 * Email: rohmat.moch@gmail.com
 * Website: cahbiyen.blogspot.com
 * lisence: Cahbiyen Inc
 * Version: 1.0.0
 */
class Table {

 public $empty = null;

 private $template = array();
 private $type = 'heading';
 private $table = null;
 private $heading = array();
 private $body = array();
 private $footer = array();
 private $rows = array();

 public function __construct($template = array()) {

  $this->template = json_encode($template);
  $this->template = json_decode($this->template);
 }

 public function build() {
  $table = $this->set_template()->table_open;

  if (count($this->heading) > 0) {
   $table .= $this->set_template()->thead_open;
   $table .= $this->get_row($this->heading);
   $table .= $this->set_template()->thead_close;
  }

  if (count($this->body) > 0) {
   $table .= $this->set_template()->tbody_open;
   $table .= $this->get_row($this->body);
   $table .= $this->set_template()->tbody_close;
  }

  if (count($this->footer) > 0) {
   $table .= $this->set_template()->tfoot_open;
   $table .= $this->get_row($this->footer);
   $table .= $this->set_template()->tfoot_close;
  }

  $table .= $this->set_template()->table_close;

  return $table;
 }

 public function clear() {
  $sturctures = array('heading', 'body', 'footer');
  foreach ($sturctures as $sturcture) {
   $this->$sturcture = array();
  }
 }

 public function set_row($rows = array(), $type = 'heading') {
  $rows = is_array($rows) ? $rows : explode(',', $rows);
  $this->rows = array('datas'=>$rows, 'type'=>$type);

  switch ($type) {
   case 'heading': array_push($this->heading, $this->rows); break;
   case 'body': array_push($this->body, $this->rows); break;
   case 'footer': array_push($this->footer, $this->rows); break;
   default : array_push($this->heading, $this->rows); break;
  }
 }

 private function get_row($rows) {
  $head = null;

  foreach ($rows as $key=>$val) {

   switch ($val['type']) {
    case 'heading': $element = 'th'; break;
    case 'body': $element = 'td'; break;
    case 'footer': $element = 'th'; break;
    default : $element = 'th'; break;
   }

   $head .= $this->set_template()->tr_open;
   foreach ($val['datas'] as $k=>$v) {
    if (is_array($v)) {
     $head .= '<'.$element;
     $head .= $this->attributes($v['attributes']).'>';
     $head .= !empty($v['content']) ? $v['content'] : $this->empty;
     $head .= '</'.$element.'>';
    } else {
     $head .= '<'.$element.'>';
     $head .= !empty($v) ? $v : $this->empty;
     $head .= '</'.$element.'>';
    }
   }
   $head .= $this->set_template()->tr_close;
  }

  return $head;
 }

 private function attributes($attributes) {
  $attr = null;
  if (is_array($attributes)) {
   foreach ($attributes as $key=>$val) {
    $attr .= ' '.$key.'="'.$val.'"';
   }
  } else {
   $attr .= ' '.$attributes;
  }

  return $attr;
 }

 private function set_template() {
  $table_open = $this->check_template(@$this->template->table_open, '<table border="1">');
  $table_close = $this->check_template(@$this->template->table_close, '</table>');
  $thead_open = $this->check_template(@$this->template->thead_open, '<thead>');
  $thead_close = $this->check_template(@$this->template->thead_close, '</thead>');
  $tbody_open = $this->check_template(@$this->template->tbody_open, '<tbody>');
  $tbody_close = $this->check_template(@$this->template->tbody_close, '</tbody>');
  $tfoot_open = $this->check_template(@$this->template->tfoot_open, '<tfoot>');
  $tfoot_close = $this->check_template(@$this->template->tfoot_close, '</tfoot>');
  $tr_open = $this->check_template(@$this->template->tr_open, '<tr>');
  $tr_close = $this->check_template(@$this->template->tr_close, '</tr>');

  $table_structure = array(
   'table_open'=>$table_open,
   'table_close'=>$table_close,
   'thead_open'=>$thead_open,
   'thead_close'=>$thead_close,
   'tbody_open'=>$tbody_open,
   'tbody_close'=>$tbody_close,
   'tfoot_open'=>$tfoot_open,
   'tfoot_close'=>$tfoot_close,
   'tr_open'=>$tr_open,
   'tr_close'=>$tr_close
  );
  $table_structure = json_encode($table_structure);
  $table_structure = json_decode($table_structure);

  return $table_structure;
 }

 private function check_template($template, $change) {
  return !empty($template) ? $template : $change;
 }
}
setelah class table sudah di buat selanjutnya buat file dengan nama index.php simpan di dalam projek yang sudah anda buat dan salin kode berikut
<?php
 // laod class table
 require_once __DIR__.'/Table.php';

 // change templates
 $table = new Table(array(
  'table_open'=>'<table border="1" cellspacing="5">'
 ));

 // set heading table
 $table->set_row(array('ID','NAME','ADDRESS'));

 // set body table
 for($i=1; $i<=10; $i++) {
  $table->set_row(array(
   array('content'=>$i, 'attributes'=>array('align'=>'center')),
   array('content'=>'Nama '.$i, 'attributes'=>array('align'=>'center')),
   array('content'=>'Alamat '.$i, 'attributes'=>array('align'=>'center'))
  ), 'body');
 }

 // set footer table
 $table->set_row('ID, NAME, ADDRESS', 'footer');

 // generate table
 echo $table->build();
setelah itu buka projek yang sudah anda buat dengan browser di komputer anda, dan lihat hasilnya
jika tidak terjadi error maka table akan terbuat otomatis oleh class table
dalam class table ini anda bisa merubah template tablenya dengan cara menambahkan properties pada __construct lihat contoh di bawah ini
 // template default class table
 $table_structure = array(
  'table_open'=>'<table border="1">',
  'table_close'=>'</table>',
  'thead_open'=>'<thead>',
  'thead_close'=>'</thead>',
  'tbody_open'=>'<tbody>',
  'tbody_close'=>'</tbody>',
  'tfoot_open'=>'<tfoot>',
  'tfoot_close'=>'</tfoot>',
  'tr_open'=>'<tr>',
  'tr_close'=>'</tr>'
 );

 // jika anda ingin merubah template tablenya
 $new_template = array('table_open'=>'<table border="5" class="table">');
 $table = new Table($new_template);

 // buat table
 echo $table->build()

 // jika table di cetak maka akan menghasilkan
 // <table border="5" class="table">...</table>
dan dalam class table ini anda bisa membuat lebih dari satu table dengan cara menambahkan clear di setiap akhir table, untuk lebih jelasnya silahkan lihat contoh berikut
<?php
 // laod class table
 require_once __DIR__.'/Table.php';

 // change templates
 $table = new Table(array(
  'table_open'=>'<table border="1" cellspacing="5">'
 ));

 // table 1
 // set heading table
 $table->set_row(array('ID','NAME','ADDRESS'));

 // set body table
 for($i=1; $i<=10; $i++) {
  $table->set_row(array(
   array('content'=>$i, 'attributes'=>array('align'=>'center')),
   array('content'=>'Nama '.$i, 'attributes'=>array('align'=>'center')),
   array('content'=>'Alamat '.$i, 'attributes'=>array('align'=>'center'))
  ), 'body');
 }

 // generate table
 echo $table->build();

 // clear table
 $table->clear();


 // table 2
 // set heading table
 $table->set_row(array('ID','NAME','ADDRESS'));

 // set body table
 for($i=1; $i<=10; $i++) {
  $table->set_row(array(
   array('content'=>$i, 'attributes'=>array('align'=>'center')),
   array('content'=>'Nama '.$i, 'attributes'=>array('align'=>'center')),
   array('content'=>'Alamat '.$i, 'attributes'=>array('align'=>'center'))
  ), 'body');
 }

 // generate table
 echo $table->build();
jika anda jalankan kode di atas maka anda akan mendapatkan 2 table
didalam class table ini juga untuk membuat rows ada 2 pilihan membuat row dengan properties array maupun dengan properties string atau text, untuk lebih jelasnya lihat contoh berikut
<?php
 // laod class table
 require_once __DIR__.'/Table.php';

 $table = new Table();

 // contoh 1
 $table->set_row('ID, NAME, ADDRESS');

 // contoh 2
 $table->set_row(array('ID','NAME','ADDRESS'));
kedua contoh berikut jika anda cetak maka akan mendapatkan hasil yang sama yaitu <tr><td>ID</td>...</tr>
jika anda ingin menambahkan attribute di setiap rows anda bisa menambahakan multiple array ketika anda membuat rows untuk lebih jelasnya lihat contoh berikut
<?php
 // laod class table
 require_once __DIR__.'/Table.php';

 $table = new Table();

 // cara 1
 $table->set_row(array(array('content'=>'ID', 'attribute'=>array('align'=>'center')),'NAME','ADDRESS'));

 // cara 2
 $table->set_row(array(array('content'=>'ID', 'attribute'=>'align="center"),'NAME','ADDRESS'));
cara 1 dan cara 2 jika anda cetak akan menghasilkan row yang sama yaitu hanya record ID yang akan mempunyai attribute align="center", karena hanya record ID di set dengan attribute align="center", anda juga bisa menambahkan attribute yang di perlukan di setiap record, untuk type data attributes anda bisa mengunakan array atau string.
dan dalam function set_row anda bisa nemanpilkan record dengan 3 jenis data, yaitu data heading, body dan footer, untuk default data setiap row yaitu data heading anda bisa merubahnya dengan data body maupun data footer, lihat contoh berikut untuk lebih jelasnya
<?php
 $table = new Table();

 // data heading
 // cara 1
 $table->set_row(array('ID','NAME','ADDRESS'));

 // cara 2
 $table->set_row(array('ID','NAME','ADDRESS'), 'heading');

 // data body
 $table->set_row(array('ID','NAME','ADDRESS'), 'body');

 // data footer
 $table->set_row(array('ID','NAME','ADDRESS'), 'footer');
jika data berupa heading maka data dari setiap row akan di tampilkan dalam tag element <thead>...</thead>
jika data berupa body maka data dari setiap row akan di tampilkan dalam tag element <tbody>...</tbody>
tapi jika data berupa footer maka data dari setiap row akan di tampilkan dalam tag element <tfoot>...</tfoot>
selain itu dalam class table ini anda juga bisa set default jika record yang tampilkan dalam table null atau kosong, untuk lebih jelas lagi silahkan lihat contoh berikut
<?php
 $table = new Table();

 // set default jika record kosong atau null
 $table->empty = '-';

 $table->set_row(array('ID','','ADDRESS'));
// <tr><td align="center">1</td><td>-</td><td>Alamat 1</td></tr>
jika kode di atas dijalankan maka data record yang kosong atau null akan di tampilkan dengan -, anda bisa merubah default nya sesuai dengan kebutuhan anda
Ok. sampai disini dulu tutorial kali ini, selamat mencoba dan semoga bisa bermanfaat

Berbagi Via

Share Facebook Share Twitter Share Google+ Share Pinterest
Jangan lupa tinggalkan komentarnya ya :)

2 comments:

  1. ArenaDomino Partner Terbaik Untuk Permainan Kartu Anda!
    Halo Bos! Selamat Datang di ( arenakartu.org )
    Arenadomino Situs Judi online terpercaya | Dominoqq | Poker online
    Daftar Arenadomino, Link Alternatif Arenadomino Agen Poker dan Domino Judi Online Terpercaya Di Asia
    Daftar Dan Mainkan Sekarang Juga 1 ID Untuk Semua Game
    ArenaDomino Merupakan Salah Satu Situs Terbesar Yang Menyediakan 9 Permainan Judi Online Seperti Domino Online Poker Indonesia,AduQQ & Masih Banyak Lain nya,Disini Anda Akan Nyaman Bermain :)

    Game Terbaru : Perang Baccarat !!!

    Promo :
    - Bonus Rollingan 0,5%, Setiap Senin
    - Bonus Referral 20% (10%+10%), Seumur Hidup


    Wa :+855964967353
    Line : arena_01
    WeChat : arenadomino
    Yahoo! : arenadomino

    Situs Login : arenakartu.org

    Kini Hadir Deposit via Pulsa Telkomsel / XL ( Online 24 Jam )
    Min. DEPO & WD Rp 20.000,-

    INFO PENTING !!!
    Untuk Kenyamanan Deposit, SANGAT DISARANKAN Untuk Melihat Kembali Rekening Kami Yang Aktif Sebelum Melakukan DEPOSIT di Menu SETOR DANA.

    ReplyDelete
  2. ArenaDomino Partner Terbaik Untuk Permainan Kartu Anda!
    Halo Bos! Selamat Datang di ( arenakartu.org )
    Arenadomino Situs Judi online terpercaya | Dominoqq | Poker online
    Daftar Arenadomino, Link Alternatif Arenadomino Agen Poker dan Domino Judi Online Terpercaya Di Asia
    Daftar Dan Mainkan Sekarang Juga 1 ID Untuk Semua Game
    ArenaDomino Merupakan Salah Satu Situs Terbesar Yang Menyediakan 9 Permainan Judi Online Seperti Domino Online Poker Indonesia,AduQQ & Masih Banyak Lain nya,Disini Anda Akan Nyaman Bermain :)

    Game Terbaru : Perang Baccarat !!!

    Promo :
    - Bonus Rollingan 0,5%, Setiap Senin
    - Bonus Referral 20% (10%+10%), Seumur Hidup


    Wa :+855964967353
    Line : arena_01
    WeChat : arenadomino
    Yahoo! : arenadomino

    Situs Login : arenakartu.org

    Kini Hadir Deposit via Pulsa Telkomsel / XL ( Online 24 Jam )
    Min. DEPO & WD Rp 20.000,-

    INFO PENTING !!!
    Untuk Kenyamanan Deposit, SANGAT DISARANKAN Untuk Melihat Kembali Rekening Kami Yang Aktif Sebelum Melakukan DEPOSIT di Menu SETOR DANA.

    ReplyDelete