Как добавить новый столбец для кнопки действия для подробностей с ajax в Codeigniter - PullRequest
0 голосов
/ 07 мая 2020

Как добавить столбцы к кнопке действия, такой как кнопка подробностей в AJAX? Это мой код: Контроллер :

    public function ajax_list()
    {
        $list = $this->th_ajaran->get_datatables();
        $data = array();
        $no = $_POST['start'];
        $tools = $_POST['start'];
        foreach ($list as $th_ajaran) {
            $no++;
            $row = array();
            $row[] = $no;
            $row[] = $th_ajaran->nama_kelas;
            $row[] = $th_ajaran->jurusan;

            $data[] = $row;
        }

        $output = array(
                        "draw" => $_POST['draw'],
                        "recordsTotal" => $this->th_ajaran->count_all(),
                        "recordsFiltered" => $this->th_ajaran->count_filtered(),
                        "data" => $data,
                );
        //output to json format
        echo json_encode($output);
    } 

Это моя модель

<?php
class Th_Ajaran_kelas_model extends CI_Model {

    var $table = 'th_ajaran';
    var $column_order = array(null, 'nama_kelas','jurusan'); //set column field database for datatable orderable
    var $column_search = array('nama_kelas','jurusan'); //set column field database for datatable searchable 
    var $order = array('th_ajaran' => 'asc'); // default order 

    private function _get_datatables_query()
    {

        //add custom filter here
        if($this->input->post('th_ajaran'))
        {
            $this->db->where('th_ajaran', $this->input->post('th_ajaran'));
        }
        if($this->input->post('nama_kelas'))
        {
            $this->db->like('nama_kelas', $this->input->post('nama_kelas'));
        }
        if($this->input->post('jurusan'))
        {
            $this->db->like('jurusan', $this->input->post('jurusan'));
        }

        $this->db->from($this->table);
        $this->db->join('th_ajaran_kelas', 'th_ajaran_kelas.id_th_ajaran = th_ajaran.id_th_ajaran');
        $this->db->join('kelas', 'th_ajaran_kelas.id_kelas = kelas.id_kelas');

        $i = 0;

        foreach ($this->column_search as $item) // loop column 
        {
            if($_POST['search']['value']) // if datatable send POST for search
            {

                if($i===0) // first loop
                {
                    $this->db->group_start(); // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND.
                    $this->db->like($item, $_POST['search']['value']);
                }
                else
                {
                    $this->db->or_like($item, $_POST['search']['value']);
                }

                if(count($this->column_search) - 1 == $i) //last loop
                    $this->db->group_end(); //close bracket
            }
            $i++;
        }

        if(isset($_POST['order'])) // here order processing
        {
            $this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
        } 
        else if(isset($this->order))
        {
            $order = $this->order;
            $this->db->order_by(key($order), $order[key($order)]);
        }
    }

    public function get_datatables()
    {
        $this->_get_datatables_query();
        if($_POST['length'] != -1)
        $this->db->limit($_POST['length'], $_POST['start']);
        $query = $this->db->get();
        return $query->result();
    }

Javascript



var table;

$(document).ready(function() {

    //datatables
    table = $('#table').DataTable({ 

        "processing": true, //Feature control the processing indicator.
        "serverSide": true, //Feature control DataTables' server-side processing mode.
        "order": [], //Initial no order.

        // Load data for the table's content from an Ajax source
        "ajax": {
            "url": "",
            "type": "POST",
            "data": function ( data ) {
                data.th_ajaran = $('#th_ajaran').val();
            }
        },

        //Set column definition initialisation properties.
        "columnDefs": [
        { 
            "targets": [ 0 ], //first column / numbering column
            "orderable": false, //set not orderable
        },
        ],

    });

    $('#btn-filter').click(function(){ //button filter event click
        table.ajax.reload();  //just reload table
    });
    $('#btn-reset').click(function(){ //button reset event click
        $('#form-filter')[0].reset();
        table.ajax.reload();  //just reload table
    });

});


...