【问题标题】:Serach and ordering is not working Datatables Server Side Processing (Codeigniter)?搜索和排序不起作用数据表服务器端处理(Codeigniter)?
【发布时间】:2018-03-18 13:15:16
【问题描述】:

我正在尝试使用 Codeigniter 的数据表服务器端处理来显示相同​​的数据。我应该使用“where”子句,并且我正在使用 Emran ul hadi 脚本类。(访问 https://emranulhadi.wordpress.com/2014/06/05/join-and-extra-condition-support-at-datatables-library-ssp-class/#comment-196)。 我的控制器脚本:

        $sql_details = array(
         'user' => 'root',
         'pass' => '',
         'db'   => 'kreatx',
         'host' => 'localhost'
       );

       $index = $this->uri->segment(3);
       $table = 'user';

       $columns = array(
         array('db' => 'Name', 'dt' => 0),
         array('db' => 'Lastname', 'dt' => 1),
         array('db' => 'Email', 'dt' => 2),
         array('db' => 'Username', 'dt' => 3),
         array('db' => 'Password', 'dt' => 4)
       );

       $primaryKey = 'ID';

       $this->load->model('employees_model');
       $department = $this->employees_model->get_department($index);

       require( 'SSP.php' );
       $where = 'Department = '.$index.'';
       echo json_encode(
         SSP::complex( $_GET, $sql_details, $table, $primaryKey, $columns, 
                      null ,$where )
        );

我的视图脚本:

    $('#employees').DataTable({
       "responsive":true,  
       "processing":true,  
       "serverSide":true,
       "searching":true,
       "ordering":true, 
       "order":[],  
       "ajax":{  
            url:"<?php echo base_url() . 
                 'employees/get_employees/'.$index.''; ?>",  
            type:"POST"  
       },
       "columnDefs":[  
            {  
                 "targets":[4],  
                 "orderable":false,  
            },  
       ],
       });

表格显示正确,没有错误。但搜索和排序不起作用。 如果我尝试搜索它,只需说处理并显示同一张表。 下单也有同样的问题。 请问有什么建议吗? 谢谢!

【问题讨论】:

  • 任何控制台错误?
  • @G_S 不,它不显示错误。

标签: javascript php codeigniter datatables


【解决方案1】:

在您的脚本中,您将“serverside”参数设置为“true”

这意味着所有过滤和排序都需要在您的 php 脚本中。每次您更改顺序或尝试应用过滤器时,dataTables javascript 都会向您在 ajax 参数下列出的 php 页面发送一个 ajax 调用。 ajax 调用将包含您在 get 或 post 变量中需要的所有内容,您可以解析这些变量。

您需要在 php 中编写代码来解析 URL 参数并动态创建过滤数据库结果的 sql 查询。

我之前没有在 Codeignitor 中这样做过,但这是我在 Laravel 中尝试的一个简单示例(注意,您需要对自己的数据库列进行硬编码,或者如果您是高级的,那么您可以将代码循环到数据库列名的数组)

    public function MyExampleJson(Request $request)
  {
    $len = $_GET['length'];
    $start = $_GET['start'];
    $select = "SELECT *,1,2 ";
    $presql = " FROM entities a ";
    $whereused = false;
    if($_GET['search']['value']) {
      $presql .= " WHERE (id LIKE '%". $_GET['search']['value']."%' ";
      $presql .= " OR column01 LIKE '%". $_GET['search']['value']."%' ";
      $presql .= " OR column02 LIKE '%". $_GET['search']['value']."%' ";
      $presql .= " OR column03 LIKE '%". $_GET['search']['value']."%' ";
      $presql .= " OR column04 LIKE '%". $_GET['search']['value']."%' ";
      $presql .= ") ";
      $whereused = true;
    }

    $orderby = "";
    $columns = array('column01','column02','column03','column04');
    $order = $columns[$request->input('order.0.column')];
    $dir = $request->input('order.0.dir');
    $columnsearcharray = $request->columns;

    foreach ($columnsearcharray as $key => $value)
    {
      if ($value['search']['value']) {
        if ($whereused) {
          $presql .= " AND ";
        } else {
          $presql .= " WHERE ";
          $whereused = true;
        }
        $presql .= $columns[$key] . " LIKE '%" . $value['search']['value'] . "%' ";
      }
    }
    $orderby = "Order By " . $order . " " . $dir;
    $sql = $select.$presql.$orderby." LIMIT ".$start.",".$len;
    $qcount = DB::select("SELECT COUNT(a.id) c".$presql);
    $count = $qcount[0]->c;
    $results = DB::select($sql);
    $ret = [];
    foreach ($results as $row) {
      $r = [];
      foreach ($row as $value) {
        $r[] = $value;
      }
      $ret[] = $r;
    }
    $ret['data'] = $ret;
    $ret['recordsTotal'] = $count;
    $ret['iTotalDisplayRecords'] = $count;
    $ret['recordsFiltered'] = count($ret);
    $ret['draw'] = $_GET['draw'];
    echo json_encode($ret);
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    相关资源
    最近更新 更多