Нумерация страниц в коде-кодировщике с ошибкой повторяющегося ввода - PullRequest
0 голосов
/ 01 октября 2018

Я реализовал нумерацию страниц в codeigniter. Но результат не ожидаемый. У меня 5 записей. 1, 2, 3, 4, 5.Это мой контроллер

$this->data['models_num']=$this->model_models->getModels_ImageData();
$model=$this->data['models_num'];
$row=count($model);
$this->data['brands']=$this->model_brands->getBrandsData();
$config['base_url'] = base_url('services/NewCar');
$config['total_rows'] = $row;
$config['per_page'] = 4;
$config["uri_segment"] = 3;
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$this->data['models'] = $this->model_models->getModels_ImageDataPage($config["per_page"], $page);
$config['num_links'] = $row;
$config['use_page_numbers'] = TRUE;
$this->pagination->initialize($config);

Моя модель:

$sql = "SELECT * FROM models LIMIT $limit OFFSET $start";

Проблема в том, что, когда я пытаюсь открыть первую страницу.clcxik На второй странице показано 3 строки. Две строки дублируются.что первая страница 1,2,3,4 записи отображаютсяИ на второй странице 3,4,5 ipalyed. Пожалуйста, помогите. Пожалуйста,

1 Ответ

0 голосов
/ 03 октября 2018

В этих случаях хорошей идеей будет ввести некоторые цифры и визуализировать, что происходит ...

Итак, принимая ваше заявление 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"]);

Изменения

  1. Установите значение по умолчанию для вашего URL-сегмента равным 1
  2. Измените значение для $ 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

и так далее...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...