2015-06-24 58 views
1

請幫我這個,我想不出如何設置我的codeigniter服務器端和數據服務器端處理。 似乎數據已經通過表,但是當我開始搜索和排序列時,它不起作用。CodeIgniter Datatables排序,搜索不工作

請看看我的代碼

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

回答

0

我相信這個問題是因爲你在做return json_encode()而不是echo json_encode(),請注意,當你在php中返回一些東西時,這些數據只能從其他php函數中接收(可用),你需要實際輸出數據在這種情況下頁面爲JavaScript來拿起。另外,僅僅爲了MVC的緣故,你應該在模型中做所有的數據庫查詢,而不是控制器。

應該是模型功能:

$query = $this->db->query("SELECT * FROM tbl_fe_pages LIMIT {$start}, {$length}"); 
$query_count = $this->db->query("SELECT * FROM tbl_fe_pages"); 
+0

是的,返回PHP函數和回聲的JavaScript ..它工作。我的問題是排序和搜索.. –

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 - 用於服務器端數據表的CodeIgniter庫1.10。