MENGURUTKAN DATA TABULAR (DALAM TABEL) SETIAP KOLOM SECARA ASCENDING DI CODEIGNITER 2.1.3

Kali ini saya akan share bagaimana mengurutkan data dalam tabel dengan hanya mengklik nama kolom di setiap kolomnya dalam codeigniter 2.1.3 disertai dengan pagination di bawah kolom setiap halamannya.
Untuk yang belum install silakan klik link ini, download codeigniter 2.1.3.
Ok, langsung ke pembahasan aja.


Siapkan Database
Disini saya menggunakan database contoh dari mysql yang bernama sakila, Jadi sobat buat dulu database bernama sakila dan ekspor file sql yang saya sediakan. Pertama ekspor sakila-schema.sql kemudian sakila-data.sql. Atau jika sobat punya database sendiri, sobat bisa menggunakannya.

Konfigurasi CodeIgniter
Edit file application/config/config.php seperti ini
//isikan dengan alamat root sobat
$config['base_url'] = 'http://localhost/ci_zone/ci_day15/';
//hapus file index.php
$config['index_page'] = '';//
dari config diatas sobat akan menghapus file index.php dan diganti dengan menambahkan file .htaccess di folder root.

Edit file application/config/autoload.php seperti ini
$autoload['libraries'] = array('database');

$autoload['helper'] = array('url','form');


Edit file application/config/database.php seperti ini
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'root';
$db['default']['database'] = 'sakila';
$db['default']['dbdriver'] = 'mysql';

Edit file application/config/routes.php seperti ini
$route['default_controller'] = "films/display";


Membuat Controller
Dengan editor teks buat file application/controllers/films.php dan isikan dengan koding dibawah ini :
<?php
class Films extends CI_Controller {
  
 function display($sort_by = 'title', $sort_order = 'asc', $offset = 0) {
  
  $limit = 20;
  $data['fields'] = array(
   'FID' => 'ID',
   'title' => 'Title',
   'category' => 'Category',
   'length' => 'Length',
   'rating' => 'Rating',
   'price' => 'Price'
  );
  
  $this->load->model('Film_model');
  
  $results = $this->Film_model->search($limit, $offset, $sort_by, $sort_order);
  
  $data['films'] = $results['rows'];
  $data['num_results'] = $results['num_rows'];
  
  // pagination
  $this->load->library('pagination');
  $config = array();
  $config['base_url'] = site_url("films/display/$sort_by/$sort_order");
  $config['total_rows'] = $data['num_results'];
  $config['per_page'] = $limit;
  $config['uri_segment'] = 5;
  $this->pagination->initialize($config);
  $data['pagination'] = $this->pagination->create_links();
  
  $data['sort_by'] = $sort_by;
  $data['sort_order'] = $sort_order;

  
  $this->load->view('film_v', $data);
 }
 
}


Membuat Model
Dengan editor teks buat file application/models/film_model.php dan isikan dengan koding dibawah ini :
<?php
class Film_model extends CI_Model {
 
 function search($limit, $offset, $sort_by, $sort_order) {
  
  $sort_order = ($sort_order == 'desc') ? 'desc' : 'asc';
  $sort_columns = array('FID', 'title', 'category', 'length', 'rating', 'price');
  $sort_by = (in_array($sort_by, $sort_columns)) ? $sort_by : 'title';
  
  // results query
  $q = $this->db->select('FID, title, category, length, rating, price')
   ->from('film_list')
   ->limit($limit, $offset)
   ->order_by($sort_by, $sort_order);
  
  $ret['rows'] = $q->get()->result();
  
  // count query
  $q = $this->db->select('COUNT(*) as count', FALSE)
   ->from('film_list');
  
  $tmp = $q->get()->result();
  
  $ret['num_rows'] = $tmp[0]->count;
  
  return $ret;
 }
 
 
}


Membuat View
Dengan editor teks buat file application/views/film_v.php dan isikan dengan koding dibawah ini :
<!DOCTYPE HTML>
<html lang="en-US">
<head>
 <title>Films</title>
 <meta charset="UTF-8">
 <style>
  * {
   font-family: Arial;
   font-size: 12px;
  }
  table {
   border-collapse: collapse;
  }
  td, th {
   border: 1px solid #666666;
   padding:  4px;
  }
  div {
   margin: 4px;
  }
  .sort_asc:after {
   content: "▲";
  }
  .sort_desc:after {
   content: "▼";
  }
 </style>
</head>
<body>
 <div>
  Found <?php echo $num_results; ?> films
 </div>
 
 <table>
  <thead>
   <?php foreach($fields as $field_name => $field_display): ?>
   <th <?php if ($sort_by == $field_name) echo "class=\"sort_$sort_order\"" ?>>
    <?php echo anchor("films/display/$field_name/" .
     (($sort_order == 'asc' && $sort_by == $field_name) ? 'desc' : 'asc') ,
     $field_display); ?>
   </th>
   <?php endforeach; ?>
  </thead>
  
  <tbody>
   <?php foreach($films as $film): ?>
   <tr>
    <?php foreach($fields as $field_name => $field_display): ?>
    <td>
     <?php echo $film->$field_name; ?>
    </td>
    <?php endforeach; ?>
   </tr>
   <?php endforeach; ?>   
  </tbody>
  
 </table>
 
 <?php if (strlen($pagination)): ?>
 <div>
  Pages: <?php echo $pagination; ?>
 </div>
 <?php endif; ?>
</body>
</html>
sekian dulu, silakan tambahan komentar sobat kalau ada yang kurang ya..

1 comment: