27 September 2016

Membuat Pagination Pencarian di Codeigniter

Setelah beberapa hari kemarin saya mencoba membuat pagination atau disebut dengan paging halaman (nomor halaman) / perpindahan halaman.
Kenapa setiap aplikasi perlu yang namanya paging halaman, dengan adanya paging halaman dapat mengoptimalisasi halaman aplikasi yang sedang di akses agar tidak terjadi load data terlalu banyak dan membuat waktu menunggu semakin lama.

Dengan membuat paging halaman kita melakukan limit data yang di panggil untuk ditampilkan, dikutip dari : http://www.candra.web.id/

Paging adalah teknik saat menampilkan data kedalam halaman halaman yang berbeda. Teknik ini digunakan jika data yang ada sangat banyak sehingga tidak mungkin tampil dalam satu halaman. Alasan yang lain, dengan paging, loading halaman lebih cepat karena php hanya meminta sebagian data saja. Contoh paging yang anda pakai tiap hari(namun jarang diperhatikan) adalah hasil pencarian Google.
Berdasarkan kesimpulan dari : https://en.wikipedia.org/wiki/Pagination
Pagination is the process of dividing a document into discrete pages, either electronic pages or printed pages.
Pagination adalah proses membagi konten web dan menampilkannya pada halaman terpisah
Dari penjelasan di atas dapat jika data yang akan kita tampilkan kedalam satu halaman dan data yang akan di tampilkan sangat banyak maka perlu adanya paging halaman. Dengan perlunya paging halaman, bagaimana cara membuat paging halaman di codeigniter, kali ini saya akan menjelaskan bagaimana membuat paging halaman di codeigniter beserta jika kita melakukan pencarian makan akan ada paging halamanya juga. Dalam kasus ini saya sudah memliki data yang perlu di beri paging halaman, contoh data adalah data mahasiswa. Anda bebas untuk membuat database dan tabelnya. Untuk source code adalah sebagai berikut.

Silahkan tambahkan file pagination.php di folder aplication > config dengan code sebagai berikut :

<?php  
if(!defined('BASEPATH')) exit('No direct script access allowed');

$config['query_string_segment'] = 'start';

$config['full_tag_open'] = '<ul class="pagination pagination-sm">';
$config['full_tag_close'] = '</ul>';

$config['first_link'] = 'First';
$config['first_tag_open'] = '<li>';
$config['first_tag_close'] = '</li>';

$config['last_link'] = 'Last';
$config['last_tag_open'] = '<li>';
$config['last_tag_close'] = '</li>';

$config['next_link'] = 'Next';
$config['next_tag_open'] = '<li>';
$config['next_tag_close'] = '</li>';

$config['prev_link'] = 'Prev';
$config['prev_tag_open'] = '<li>';
$config['prev_tag_close'] = '</li>';

$config['cur_tag_open'] = '<li class="active"><a href="">';
$config['cur_tag_close'] = '</a></li>';

$config['num_tag_open'] = '<li class="page">';
$config['num_tag_close'] = '</li>';


/* End of file pagination.php */
/* Location: ./application/config/pagination.php */

Kode di atas merupakan configurasi dari pagination untuk framework css bootstrap.

Kita menampilkan data pada controller mahasiswa dan fungsi index :

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Mahasiswa
 *
 * @author ade
 */
class mahasiswa extends CI_Controller {
    //put your code here
    public $data = array(
        'view' => 'list_mahasiswa',
        'title' => 'List Mahasiswa',
        'link' => 'mahasiswa/'
    );


    public function __construct() {
        parent::__construct();
        
        $this->load->model('Model_mahasiswa', 'm_mahasiswa');
    }
    

    public function index()
    {

        $config['base_url'] = site_url('mahasiswa/index/');
        $config['total_rows'] = $this->m_mahasiswa->total_rows();
        $config['per_page'] = 10;
        $config['uri_segment'] = 4;
        $config['suffix'] = (!empty($_GET)) ? '?'.http_build_query($_GET, '', "&") : '';
        $config['first_url'] = $config['base_url'] . $config['suffix'];
        $this->pagination->initialize($config);

        $start = $this->uri->segment(4, 0);
        $confirm = $this->m_mahasiswa->index_limit($config['per_page'], $start);
        if($confirm) {
            $this->data['mahasiswa_data'] = $confirm;
            $this->data['pagination'] = $this->pagination->create_links();
            $this->data['start'] = $start;

            $this->load->view('template', $this->data);
        } else {
            $this->data['pesan_warning'] = 'Data Not Found';
            $this->load->view('template', $this->data);
        }
    }
    
}

untuk code modelnya sebagai berikut :
<?php
if(!defined('BASEPATH')) exit('No direct script access allowed');
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of Model_mahasiswa
 *
 * @author ade
 */
class model_mahasiswa extends CI_Model {
    //put your code here
    public $table = "mahasiswa";


    public function total_rows()
    {
        if(!empty($_GET['keyword'])) {
            return $this->db->from('mahasiswa')
                            ->like('nama', $_GET['keyword'])
                            ->or_like('angkatan', $_GET['keyword'])
                            ->or_like('gelombang', $_GET['keyword'])
                            ->or_like('shift', $_GET['keyword'])
                            ->order_by('nim', 'DESC')
                            ->count_all_results();
        } else {
            return $this->db->from('mahasiswa')
                            ->count_all_results();
        }
    }
    
    public function index_limit($limit, $start = 0)
    {
        if(!empty($_GET['keyword'])) {
            return $this->db->select('*')
                            ->from('mahasiswa')
                            ->like('nama', $_GET['keyword'])
                            ->or_like('angkatan', $_GET['keyword'])
                            ->or_like('gelombang', $_GET['keyword'])
                            ->or_like('shift', $_GET['keyword'])
                            ->order_by('nim', 'DESC')
                            ->limit($limit, $start)
                            ->get()->result();
        } else {
            return $this->db->select('*')
                            ->from('mahasiswa')
                            ->order_by('nim', 'DESC')
                            ->limit($limit, $start)
                            ->get()->result();
        }
            
    }
}
Untuk viewnya sebagai berikut :
<div class="row">
 <div class="col-md-8">
  <div class="btn-group small" role="group" aria-label="...">
   <a href="<?php echo site_url('office/mahasiswa/import'); ?>" id="import" class="btn btn-primary btn-sm" onclick="return confirm('Klik OK untuk melanjutkan');"><i class="glyphicon glyphicon-import"></i> Syncron</a>
   <?php /* echo anchor('#', '<i class="glyphicon glyphicon-import"></i> Syncron', array('class' => 'btn btn-primary btn-sm', 'id' => 'import')); */ ?>

   <?php echo anchor('office/mahasiswa', '<i class="glyphicon glyphicon-refresh"></i> Refresh', array('class' => 'btn btn-info btn-sm')); ?>
  </div>
 </div>
 <div class="col-md-4">
  <form action="<?php echo site_url($link); ?>" method="get">
   <div class="input-group">
    <input type="text" class="form-control input-sm" name="keyword" value="<?php echo (!empty($_GET['keyword'])) ? $_GET['keyword'] : ''; ?>" placeholder="Search for...">
    <span class="input-group-btn">
     <button class="btn btn-primary btn-sm" type="submit" name="submit" value="cari">Go!</button>
    </span>
   </div>
  </form>
 </div>
</div>
<br>

<?php if (!empty($mahasiswa_data)) : ?>
<!-- table data -->
<div class="table-responsive">
<table class="table table-striped table-hover table-light-dark table-bordered" id="myTable" style="margin-bottom:0;padding-bottom:0;">
 <thead>
 <tr>
  <th>#</th>
  <th>NIM</th>
  <th>NAMA</th>
  <th>ANGKATAN</th>
  <th>SHIFT</th>
  <th>GELOMBANG</th>
  <th>TELP.</th>
  <th>STATUS</th>
 </tr>
 </thead>
 <tbody>
 <?php
 
 //print_r($confirm_data);
 foreach ($mahasiswa_data as $row) {
  
  echo "<tr>
   <td>".++$start."</td>
   <td>".$row->nim."</td>
   <td>".strtoupper($row->nama)."</td>
   <td>".$row->angkatan."</td>
   <td>".$row->shift."</td>
   <td>".$row->gelombang."</td>
   <td>".$row->no_telp."</td>
   <td>".$row->sts_kul."</td>
  </tr>";
 }
 
  
 ?>
 </tbody>
</table>
</div>

<div class="row" style="margin-top:0;padding-top:0;">
 <div class="col-md-6"></div>
 <div class="col-md-6">
  <nav class="text-right">
   <?php echo $pagination; ?>
  </nav>

 </div>
</div>

<?php endif; ?>

<br>

Semoga bermanfaat dan bisa di praktekan, jika mengalami kesulitan silahkan komentar di bawah, sengah pada bagian view saya langsung membuat bagian tabelnya.

Loading...

I am a fan of technology and i love coffee. I’m also interested in web programming and framework. below there are some accounts you can follow to contact me.

Comments

Thanks for comments.
EmoticonEmoticon