這樣就可以得到一個初始的DataTables
<link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.21/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script type="text/javascript" charset="utf8" src="http://cdn.datatables.net/1.10.21/js/jquery.dataTables.js"></script>
<table id="table_id_example" class="display">
<thead>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Row 1 Data 1</td>
<td>Row 1 Data 2</td>
</tr>
<tr>
<td>Row 2 Data 1</td>
<td>Row 2 Data 2</td>
</tr>
</tbody>
</table>
<!--第三步:初始化Datatables-->
$(document).ready( function () {
$('#table_id_example').DataTable();
} );
只需把查詢資料返回前端,前端自動迴圈渲染
<table id="table_id_example" class="display">
<thead>
<tr>
<th>ID</th>
<th>名稱</th>
</tr>
</thead>
<tbody>
@foreach($arr as $val)
<tr>
<td>{{$val->id}}</td>
<td>{{$val->name}}</td>
</tr>
@endforeach
</tbody>
</table>
顧名思義,手動在後端使用程式碼進行分頁
這樣主要是為了,減輕資料庫一次查詢百萬條資料的壓力和防範前端面對百萬條資料進行分頁而產生崩潰的問題
$(document).ready( function () {
$('#table_id_example').DataTable({
serverSide:true,
"paging": true,
"lengthMenu": [10, 25, 50, 75, 100],
ajax:{
url:'xxxxx',
type:'get',
},
columns:[
{data:'id'},
{data:'title'},
{data:'created_at'},
{data:'btn'},
]
});
} );
public function list(Request $request){
if ($request->ajax()){
$start=$request->get('start',0);
$length=min(100,$request->get('length',10));
$data=Article::offset($start)->limit($length)->get();
$total=Article::count();
$result=[
'draw'=>$request->get('draw'),
'recordsTotal'=>$total,
'recordsFiltered'=>$total,
'data'=>$data
];
return $result;
}
return view('list');
}
解決前面操作列佔位,最常見是按鈕的新增
protected $appends=['btn'];
function getBtnAttribute(){
$id=$this->id;
return "<button value='$id' >刪除</button>";
}
此處是多條件搜尋
首先關閉自帶搜尋功能
"searching": false,
在datatables上準備一個搜尋表單
![datatables服務端分頁](https://i.iter01.com/images/c5d05e794cac2178b9b69c03b6294c386e4f6947819037b8c82a6b8110219cab.png)
外掛例項用一個變數接收
![datatables服務端分頁](https://i.iter01.com/images/705d78be943f0d1f046a43f0fee31d10d0d81ca7388f8c60bdb01b13c7530ac0.png)
阻止表單預設提交,然後手動呼叫外掛發起ajax提交
function search() {
data.ajax.reload();
return false;
}
給datetables新增提交引數,這裡必須要用一個函式
![datatables服務端分頁](https://i.iter01.com/images/d2fde4351f43c5a5b773327a1b43dfd981aaafdef4449c837bb1406d6f4ca6f6.png)
組裝多條件搜尋的條件
![datatables服務端分頁](https://i.iter01.com/images/31229c7b92899f0f1c8b7a8ce8f327d334495008960793db0ad267a918cff60b.png)
然後在查詢語句加如下條件即可
![datatables服務端分頁](https://i.iter01.com/images/cab05e18863f9e2136239a41eb7a58e1cd7ce45e6eebc0e4b539bd6afaec3036.png)
首先在後端程式碼加入如下程式碼段
$orderArr = $request->get('order')[0];
$column = $orderArr['column'];
$dir = $orderArr['dir'];
$orderField = $request->get('columns')[$column]['data'];
查詢構造器,拼接上排序方法
![datatables服務端分頁](https://i.iter01.com/images/f2f8b9c95dbf83a77c66d2908c2fbdc321e89942a85058d4c24606c39e7dac33.png)
注意bug
![datatables服務端分頁](https://i.iter01.com/images/9d43557c8dc4d4952740b43e8cf10f979a2407f2dcdf46ae65209c5961ec030f.png)
另,前端加入如下內容可實現第二列預設進行倒序排序,其他列禁止排序
"columnDefs": [
{ "orderable": false, "targets": [0,2,3,4,5,6,7,8,9,10] }
],
"order":[[ 1, "desc" ]],
本作品採用《CC 協議》,轉載必須註明作者和本文連結