Прежде всего, я использовал здесь пример javascript, я взял базовый и изменил его самостоятельно.
https://datatables.net/examples/data_sources/server_side
У меня есть пара проблем, с которыми нужноявляются:
- После загрузки данных при загрузке страницы он успешно извлекает данные по умолчанию, НО не применяет правильное представление нумерации страниц и длины.Скажем, у меня есть 100 данных по умолчанию, они полностью показаны, а не разрезаны на 10, что является длиной по умолчанию для dataTable.Также при разбивке на страницы он генерирует 1–10 кнопок разбивки на страницы, но он не работает, поскольку все 100 записей уже отображаются на странице 1.
- После использования поиска он успешно извлекает правильные данные, НО dataTable не делаетt выводит на него новый набор данных, что противоречит приведенному выше примеру.
Это мой скрипт dataTable:
$('#invoice-history').DataTable({
processing: true,
serverSide: true,
searchDelay: 1000,
ajax: {
url: '/stock-sales/search',
type: 'POST',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
},
columns: [
{ data: 'ss_id' },
{
render: function ( data, type, row, meta ) {
return row.patient_last_name + ', ' + row.patient_first_name;
}
},
{ data: 'grandtotal_current' },
{ data: 'created_at' },
{
render: function ( data, type, row, meta ) {
return '<a href="/reports/invoice/' + row.ss_id + '/print" target="_blank" class="btn btn-primary btn-xs btn-block"><i class="fa fa-print"></i> Print</a>';
}
},
{
render: function ( data, type, row, meta ) {
return '<a href="/stock-sales/return/' + row.ss_id + '" class="btn btn-danger btn-xs btn-block"><i class="fa fa-undo"></i> Return</a>';
}
}
],
columnDefs: [ {
targets: [ 4, 5 ],
orderable: false
} ],
language: {
emptyTable: '<center><span class="label label-danger">NO INVOICE RECORDS FOUND</span></center>',
zeroRecords: '<center><span class="label label-danger">NO MATCHING RECORDS FOUND</span></center>'
},
order: [[ 3, 'desc' ]]
});
На стороне сервера я использую Laravel Framework:
public function search(Request $request)
{
$transactions = StockSales::getAllByDepartment(Auth::user()->employee->department->id, $request->search['value']);
return array(
"draw" => 1,
"recordsTotal" => count($transactions),
"recordsFiltered" => count($transactions),
"data" => $transactions
);
}
Я не хочу получать исходное общее количество записей перед фильтром, поэтому я установил его таким же образом, я не думаю, что это как-то связано с разбиением на страницы полученных данных, как у менятакже пытался жестко закодировать более высокое значение recordsTotal.
РЕДАКТИРОВАТЬ:
фактически сделал поиск перерисовывать данные путем возврата интергера рисования из ajax
public function search(Request $request)
{
$transactions = StockSales::getAllByDepartment(Auth::user()->employee->department->id, $request->search['value']);
return array(
"draw" => $request->draw, //from fixed 1
"recordsTotal" => count($transactions),
"recordsFiltered" => count($transactions),
"data" => $transactions
);
}