Column filters server side

Column filters server side

SavageBoyzsSavageBoyzs Posts: 2Questions: 1Answers: 0
edited February 2021 in Free community support

Hello everyone, i wanna do this, but in server side: https://datatables.net/extensions/fixedheader/examples/options/columnFiltering.html
I use codeigniter 4, library for ajax TablesIgniter. And my global search is working, but i dont know how to link my functions from controller with filters from each column.

Jquery for datatable:

$(document).ready(function(){
  $('#example thead tr').clone(true).appendTo( '#example thead' );
    $('#example thead tr:eq(1) th').each( function (i) {
        var title = $(this).text();
        if(i == 6){
          $(this).html( '<input id="Filter'+i+'" type="text" placeholder="'+ title +'" disabled/>' );
        }else{
          $(this).html( '<input id="Filter'+i+'" type="text" placeholder="'+ title +'" />' );
        }
        
        $( 'input', this ).on( 'keyup change', function () {
            if ( table.column(i).search() !== this.value ) {
                table
                    .column(i)
                    .search( this.value )
                    .draw();
            }
        } );
    } );
var table = $('#example').DataTable({
            "order":[],
            "serverSide":true,
            "searching": true,
            "processing": true,
            "lengthChange":false,
            "orderCellsTop": true,
            "fixedHeader": true,

            "ajax":{
                url:"<?=base_url('inspectors/fetch_all')?>",
                type:'POST',
                data:{
                  'id': $('#Filter0').val(),
                  'sbe_name': $('#Filter1').val(),
                  'au_name': $('#Filter2').val(),
                  'date_fr': $('#Filter3').val(),
                  'date_to': $('#Filter4').val(),
                  'duration': $('#Filter5').val(),
                },
            }

          });
});

My functions from controller:
Here fetch_all() for global search and fetch_id() for search at id

/*Search all*/
  public function fetch_all()
  {
    $modelInspector = new M_inspectors();

    $data_table = new TablesIgniter();

    $data_table->setTable($modelInspector->noticeTable())
           ->setDefaultOrder("Id_ins", "DESC")
           ->setSearch(["Id_ins","TitleS", "TitleA", "DateFr","DateTo","Duration"])
           ->setOrder(["Id_ins", "TitleS", "TitleA", "DateFr","DateTo","Duration"])
           ->setOutput(["Id_ins", "TitleS", "TitleA", "DateFr","DateTo","Duration", $modelInspector->button()]);
    return $data_table->getDatatable();
  }
  /*Search ID*/
  public function fetch_id()
  {
    $modelInspector = new M_inspectors();

    $data_table = new TablesIgniter();

    $data_table->setTable($modelInspector->noticeTable())
           ->setDefaultOrder("Id_ins", "DESC")
           ->setSearch(["Id_ins"])
           ->setOrder(["Id_ins", "TitleS", "TitleA", "DateFr","DateTo","Duration"])
           ->setOutput(["Id_ins", "TitleS", "TitleA", "DateFr","DateTo","Duration", $modelInspector->button()]);
    return $data_table->getDatatable();
  }
  /********************************/

Functions from model:

/*Filters*/
  public function noticeTable()
  {
    $builder = $this->db->table('inspectors')
    ->join('sbe','sbe.Id_sbe = inspectors.SbeId')
    ->join('authority','authority.Id_au = inspectors.AuthorityId');
    return $builder;
  }
  public function button()
  {
    $action_button = function($row){
      return '
        <a type="button" onclick="delete_data(<?=$inspectorItem['."Id_ins".']?>)" class="btn btn-outline-danger btn-sm"><i class="bi bi-trash-fill"></i></a>
        <a href="<?php base_url()?>/edit_ins/<?=$inspectorItem['."Id_ins".']?>" class="btn btn-outline-primary btn-sm" type="button"><i class="bi bi-pencil-square"></i></a>
        ';
    };

    return $action_button;
  }

Please, explain how can i link my filters with function from controller

Answers

This discussion has been closed.