CodeIgniter数据表排序,搜索不起作用

时间:2015-06-24 14:35:12

标签: jquery codeigniter datatables

请帮我这个,我无法弄清楚如何设置我的codeigniter服务器端和数据服务器端处理。 似乎数据已经通过表格推送,但是当我开始搜索和排序列时,它无法正常工作。

请参阅我的代码

CI服务器端控制器

function admin_pages_datatable()
{
    $start = $this->input->post("start");
    $length = $this->input->post("length");
    $draw = $this->input->post("draw");
    $query = $this->db->query("SELECT * FROM tbl_fe_pages LIMIT {$start}, {$length}");
    $query_count = $this->db->query("SELECT * FROM tbl_fe_pages");
    $query_count = $query_count->num_rows();
    $query = $query->result();
    $datatable = array();
    $s = 1;
    foreach($query as $row){
        $datatable["data"][] = array(
            $s++,$row->subject,$row->descriptions,$row->type,$row->status,'F'
        );
    }

    $datatable["draw"] = $draw;
    $datatable["recordsTotal"] = 10;
    $datatable["recordsFiltered"] = $query_count;
    return json_encode($datatable);
}

的Javascript

var table_items_all = $('#data').dataTable({
            "aaSorting": [[ 2, "desc" ]],
            "scrollY"           : "300px",
            "scrollCollapse"    : true,
            "processing"        : true,
            "serverSide"        : true,
            "ajax": {
                "url" : "http://localhost/myproject/maintenance/admin_pages_datatable",
                "type" : "POST"
            },
            "language": {
                "emptyTable":     "My Custom Message On Empty Table"
            },
            "aoColumns": 
            [
                null, null, null, null, null, {sClass: 'controls'}
            ],

        }); 

非常感谢您的帮助:D

2 个答案:

答案 0 :(得分:0)

我认为这个问题是因为你正在做echo json_encode()而不是$query = $this->db->query("SELECT * FROM tbl_fe_pages LIMIT {$start}, {$length}"); $query_count = $this->db->query("SELECT * FROM tbl_fe_pages"); ,请注意当你在php中返回一些内容时,只能从其他php函数接收(可用)这些数据,你在这种情况下需要实际输出页面上的数据以便javascript接收。

另外,仅为了MVC,您应该在模型中执行所有数据库查询,而不是控制器。

应该是模型功能:

git diff HEAD HEAD^ myfile.txt

答案 1 :(得分:0)

您已使用"serverSide":true启用了服务器端处理。在服务器端处理模式过滤中,分页和排序计算都由服务器执行。

请参阅客户端在服务器端处理模式下发送的full list of parameters。其中包括:

  

search[value]全局搜索值

     

order[i][column]应该应用排序的列。这是对也提交给服务器的列数组的索引引用。

     

order[i][dir]此列的订购方向。 ascdesc分别表示升序或降序。

     

在上面的参数中,i是一个整数,它将改变以指示数组值。在大多数现代服务器端脚本环境中,这些数据将自动作为数组提供给您。

所以我假设您应该添加以下将成为数组的变量:

$search = $this->input->post("search");
$columns = $this->input->post("columns");
$order = $this->input->post("order");

然后,您需要根据这些数组中的数据修改SQL查询。

另外,您可以寻找已经为您执行服务器端处理逻辑的库,而不是重新发明轮子。例如,有github.com/zepernick/Codeigniter-DataTables - 服务器端DataTables 1.10的CodeIgniter库。