В этих случаях хорошей идеей будет ввести некоторые цифры и визуализировать, что происходит ...
Итак, принимая ваше заявление sql
$sql = "SELECT * FROM models LIMIT $limit OFFSET $start";
$ limit будет количество элементов, которые вы хотите получить. $ start - это место, откуда он начнет их получать.
Когда $ page равен 0, т. Е. В первый раз не будет указано число, $ start будет 0. Таким образом, вы получите 1,2, 3,4
Когда $ page = 2, $ start будет равно 2, поэтому вы получите 3,4,5, так как смещение теперь равно 2. т.е. оно начинает считывать с 3-й позиции в базе данных.
Вы ожидаете, что 2-я страница должна начинаться с 5-го элемента, поэтому она должна давать 5,6,7,8.
Проблема в том, что ваше смещение не является правильным.Это должен быть номер страницы * количество записей .
Быстрое решение состоит в том, чтобы изменить существующий код с ...
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$this->data['models'] = $this->model_models->getModels_ImageDataPage($config["per_page"], $page);
на
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 1;
$this->data['models'] = $this->model_models->getModels_ImageDataPage($config["per_page"], ($page -1) * $config["per_page"]);
Изменения
- Установите значение по умолчанию для вашего URL-сегмента равным 1
- Измените значение для $ start (offset)быть
($page -1) * $config["per_page"]
Таким образом, когда страницы нет, $ page будет равен 1 (то же самое, что и страница 1).
Offset
Page ($page - 1 ) * $config["per_page"] Entries
1 (1 - 1) * 4 = 0 1,2,3,4
2 (2 - 1) * 4 = 4 5,6,7,8
3 (3 - 1) * 4 = 8 9,10,11,12
4 (4 - 1) * 4 = 12 13,14,15,16
и так далее...