Внесите следующие изменения в класс Pagination (/system/libraries/Pagination.php), чтобы он использовал номера страниц вместо смещений.
СТАРЫЙ (строки 146–153):
if ($CI->uri->segment($this->uri_segment) != 0)
{
$this->cur_page = $CI->uri->segment($this->uri_segment);
// Prep the current page - no funny business!
$this->cur_page = (int) $this->cur_page;
}
НОВОЕ:
Добавьте опцию «else» в оператор if, чтобы убедиться, что значение по умолчанию; страница = 1.
if ($CI->uri->segment($this->uri_segment) != 0)
{
$this->cur_page = $CI->uri->segment($this->uri_segment);
// Prep the current page - no funny business!
$this->cur_page = (int) $this->cur_page;
}
else
{
$this->cur_page = 1;
}
СТАРЫЙ (строка 175):
$this->cur_page = floor(($this->cur_page/$this->per_page) + 1);
НОВОЕ:
Просто закомментируйте эту строку, чтобы текущая страница подчинялась контроллеру/URI.
//$this->cur_page = floor(($this->cur_page/$this->per_page) + 1);
СТАРЫЙ (строка 206):
$i = $uri_page_number - $this->per_page;
НОВОЕ:
Предыдущая страница всегда должна быть текущей страницей за вычетом 1.
$i = $uri_page_number - 1;
СТАРЫЙ (строка 230):
if ($this->cur_page == $loop)
НОВОЕ:
URI без нумерации страниц следует рассматривать как страницу 1.
if ($this->cur_page == $loop || ($this->cur_page == 1 && $this->cur_page == $loop))
СТАРЫЙ (строки 238–247):
if ($n == '' && $this->first_url != '')
{
$output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->first_url.'">'.$loop.'</a>'.$this->num_tag_close;
}
else
{
$n = ($n == '') ? '' : $this->prefix.$n.$this->suffix;
$output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$n.'">'.$loop.'</a>'.$this->num_tag_close;
}
НОВОЕ:
URL-адреса страниц должны использовать номера страниц, а не смещения.
if ($n == '' && $this->first_url != '')
{
$output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$loop.'">'.$loop.'</a>'.$this->num_tag_close;
}
else
{
$n = ($n == '') ? '' : $this->prefix.$n.$this->suffix;
$output .= $this->num_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$loop.'">'.$loop.'</a>'.$this->num_tag_close;
}
СТАРЫЙ (строка 256):
$output .= $this->next_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.($this->cur_page * $this->per_page).$this->suffix.'">'.$this->next_link.'</a>'.$this->next_tag_close;
НОВОЕ:
Следующая страница всегда должна быть суммой текущей страницы и 1.
$output .= $this->next_tag_open.'<a '.$this->anchor_class.'href="'.$this->base_url.$this->prefix.($this->cur_page + 1).$this->suffix.'">'.$this->next_link.'</a>'.$this->next_tag_close;
СТАРЫЙ (строка 262):
$i = (($num_pages * $this->per_page) - $this->per_page);
НОВОЕ:
Последней страницей должно быть общее количество страниц.
$i = $num_pages;
Замените все старые строки новыми строками. Убедитесь, что вы делаете резервную копию файла перед изменением.
Надеюсь это поможет :)
ИЗМЕНИТЬ:
Вам необходимо обновить функциональный тест контроллера, например:
function test($start_from = 0)
{
$this->load->library('pagination');
$data = array();
$per_page = 3;
$total = $this->activity_model->count_by();
$config['base_url'] = base_url() . 'test';
$config['total_rows'] = $total;
$config['per_page'] = $per_page;
$config['uri_segment'] = 2;
$config['num_links'] = 2;
$config['use_page_numbers'] = TRUE;
$start = $per_page * ($start_from-1);
$data['follow'] = $this->activity_model->get($per_page, $start);
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
$this->load->view('front_end/test' ,$data);
}
Здесь я добавил новую переменную $start, которая равна $per_page * ($start_from-1)
. Теперь передайте этот $start в качестве аргумента модели.
Это умножает количество элементов на странице на (текущий номер страницы -1). Это означает, что если ваши элементы на странице 10
, а вы находитесь на второй странице, $start = 10 *(2-1)
, что дает 10
. Таким образом, ваш результат будет начинаться с 10,20 и так далее.
Надеюсь это поможет :)
person
Sabari
schedule
28.01.2012