Обходной путь, который стоит попробовать ..
Если мы не отправим recordsTotal с сервера, разбиение на страницы не будет работать должным образом.Если мы отправим высокое статическое число в виде recordsTotal , в таблице будет отображаться активная кнопка Next , даже если на следующей странице нет данных.
Итак, я оказался в решении, которое использует два параметра, полученных в сценарии ajax - ' start ' и ' length '.
Если строкина текущей странице меньше, чем ' limit ' нет данных на следующей странице.Таким образом, общее количество будет равно « start » + « текущее количество страниц ».Это отключит кнопку Далее на последней странице.
Если строки на текущей странице больше или равны ' limit ', на следующих страницах больше данных.Затем я получу данные для следующей страницы.Если на следующей странице есть хотя бы одна строка, отправьте recordsTotal что-то большее, чем ' start + limit '.При этом отобразится активная кнопка Next .
Пример кода:
$limit = require_param('length');
$offset = require_param('start');
$current_page_data = fn_to_calculate_data($limit, $offset); // in my case, mysqli result.
$data = “fetch data $current_page_data”;
$current_page_count = mysqli_num_rows($current_page_data);
if($current_page_count >= $limit) {
$next_page_data = fn_to_calculate_data($limit, $offset+$limit);
$next_page_count = mysqli_num_rows($next_page_data);
if($next_page_count >= $limit) {
// Not the exact count, just indicate that we have more pages to show.
$total_count = $offset+(2*$limit);
} else {
$total_count = $offset+$limit+$next_page_count;
}
} else {
$total_count = $offset+$current_page_count;
}
$filtered_count = $total_count;
send_json(array(
'draw' => $params['draw'],
'recordsTotal' => $total_count,
'recordsFiltered' => $filtered_count,
'data' => $data)
);
Однако это решение добавляет нагрузку на сервер, так как дополнительно рассчитывает количество строк на следующей странице.,В любом случае, это небольшая нагрузка по сравнению с итоговыми строками вычислений.
Нам нужно скрыть информацию о количестве из нижнего колонтитула таблицы и использовать простую нумерацию страниц.
dtOptions = {};
dtOptions.pagingType = "simple";
dtOptions.fnDrawCallback = function() {
$('#'+table_id+"_info").hide();
};
$('#' + table_id).dataTable(dtOptions);