Halo semuanya, beberapa hari yang lalu saya ada case untuk masalah menampilkan data yang cukup banyak dari database ke datatable, sebelum menggunakan ini view datatable stack , artinya blank tidak kuat tampung dari data cukup besar langsung tampilkan di data tables.

Akhrinya saya menemukan cara menampilkan data yang cukup besar menggunakan serverside data tables alhamdullilah data tampil dengan lancar, tutor ini dari mbah google saya dapat, ini saya posting disini biar ga hilang dan bisa digunakan oleh teman” semua yang hobicoding

Langsung saja berikut ada codenya semoga bermanfaat , diantaranya untuk Controller, Model, View:


Fungsi Controller :


public function hc_list()
    {

        $list = $this->hc_model->get_datatables();
        $data = array();
        $no = $_POST[`start`];
        foreach ($list as $item) {
            $no++;
            $row = array();
            $row[] = $no;
            $row[] = $item->idacc;
            $row[] = $item->nama;
            $row[] = $item->sbu;
            $row[] = $item->group;
            $row[] = $item->type;
            $row[] = "<button class=`btn btn-info btn-sm` onclick=fungsionclik()><i class=`fa fa-edit` title=`Edit`></i></button>";
            $row[] = "<button class=`btn btn-success btn-sm` onclick=fungsionclik() title=`Input`><i class=`fa fa-edit`></i></button>";
 
            $data[] = $row;
        }
 
        $output = array(
                        "draw" => $_POST[`draw`],
                        "recordsTotal" => $this->hc_model->count_all(),
                        "recordsFiltered" => $this->hc_model->count_filtered(),
                        "data" => $data,
                );
        //output to json format
        echo json_encode($output);
    }

Fungsi Model :


<?php 
class Hc_model extends CI_Model{	
    
    private $mips_gl;

    //silahkan masukan nama table
    var $table = `tbl_hc`; 
    //field yang ada di table user
    var $column_order = array(null, `hc_nm`,`hc_email`,`hc_notelp`); 
    //silahkan masukan field ke dalam array ini untuk field yang bisa dicari
    var $column_search = array(`noac`,`nama`); 
    // ini order, bisa menggunakan asc atau desc
    var $order = array(`noid` => `asc`);     

    function __construct() {
        parent::__construct();
        //ini silahkan disesuaikan dengan databases anda
        $this->mips_gl = $this->load->database(`mips_gl`, TRUE);
    }

    private function _get_datatables_query(){
         
        $this->mips_gl->from($this->table);
 
        $i = 0;
     
        foreach ($this->column_search as $item) // looping awal
        {
            if($_POST[`search`][`value`]) // jika datatable mengirimkan pencarian dengan metode POST
            {
                 
                if($i===0) // looping awal
                {
                    //$this->db->group_start(); 
                    $this->mips_gl->like($item, $_POST[`search`][`value`]);
                }
                else
                {
                    $this->mips_gl->or_like($item, $_POST[`search`][`value`]);
                }
 
                if(count($this->column_search) - 1 == $i){
                    //$this->db->group_end(); 
                } 
                    
            }
            $i++;
        }
         
        if(isset($_POST[`order`])) 
        {
            $this->mips_gl->order_by($this->column_order[$_POST[`order`][`0`][`column`]], $_POST[`order`][`0`][`dir`]);
        } 
        else if(isset($this->order))
        {
            $order = $this->order;
            $this->mips_gl->order_by(key($order), $order[key($order)]);
        }

        }
     
        function get_datatables()
        {
            $this->_get_datatables_query();
            if($_POST[`length`] != -1)
            $this->mips_gl->limit($_POST[`length`], $_POST[`start`]);
            $query = $this->mips_gl->get();
            return $query->result();
        }
     
        function count_filtered()
        {
            $this->_get_datatables_query();
            $query = $this->mips_gl->get();
            return $query->num_rows();
        }
     
        public function count_all()
        {
            $this->mips_gl->from($this->table);
            return $this->mips_gl->count_all_results();
        }

}
?>

Fungsi View :


<script type="text/javascript">
$(document).ready(function(){
    

    $(`#tabel_hc`).DataTable({ 
        "processing"    : true, 
        "serverSide"    : true, 
        "order"         : [], 
        "iDisplayLength": 10,
        "responsive"    : true,
        "autoWidth"     : false,
        rowReorder: true,
        "language"      : {
            searchPlaceholder: `Cari`,
            sSearch: ``,
            lengthMenu: `_MENU_`,
        },
        // Load data for the table`s content from an Ajax source
        "ajax": {
            url     : base_url + `hcs/hc_list`,
            type    :`POST`,
            data    :{},
            dataType: "json",
            beforeSend: function () {
                //bisa masukan fungsi open loading disini
            },
            complete: function () {
               //bisa masukan fungsi close loading disini setelah data berhasil diload
            }
        },
        "columnDefs": [
        { 
            "targets": [ 0 ], //first column / numbering column
            "orderable": false, //set not orderable
        },
        ],
 
    });

   
});    
</script>
    
    
            <table id="tabel_hc" class="table table-hover table-striped" style="width: 100%">
                <thead>
                    <tr>
                        <th style="width: 5%">No</th>
                        <th style="width: 5%">Acct</th>
                        <th style="width: 40%">Nama</th>
                        <th style="width: 5%">Sbu</th>
                        <th style="width: 5%">Group</th>
                        <th style="width: 5%">Type</th>
                        <th style="width: 5%">Edit</th>
                        <th style="width: 5%">Sld</th>
                    </tr>
                </thead>
            </table>

 

Kurang lebih itu yang saya bisa share , dan ini sudah berhasil saya gunakan.,