2016-02-15 3 views
0

Я использую систему разбиения на страницы в Codeigniter, и что-то не работает должным образом.Pagination in Codeigniter создает странные ссылки

У меня есть поиск, который дает всего 5 результатов.

Если я ставлю 1 пункт на странице он создает пагинации с ссылками как

example.com/suppliers/ Page 1 
example.com/suppliers/1 Page 2 
example.com/suppliers/2 Page 3 
example.com/suppliers/3 Page 4 
example.com/suppliers/4 Page 5 

, который является правильным

Но если я ставлю 2 пунктов на странице ТТ выглядит как

example.com/suppliers/ Page 1 
example.com/suppliers/2 Page 2 
example.com/suppliers/4 Page 3 

И если я положил 3 предмета на страницу, то это выглядит как

example.com/suppliers/ Page 1 
example.com/suppliers/3 Page 2 

Таким образом, он перескакивает страницы в порядке, эквивалентном результатам на страницу.

Это код, который используется для создания пагинации:

//Create the pagination links 
$config['base_url'] = base_url().'/suppliers'; 
$config['total_rows'] = $this->data['count_suppliers']; 
$config['per_page'] = RESULTS_IN_SEARCH;  
$config['full_tag_open'] = '<ul class="pagination">'; 
$config['full_tag_close'] = '</ul>'; 
$config['prev_tag_open'] = '<li class="prev">'; 
$config['prev_tag_close'] = '</li>'; 
$config['prev_link'] = '<i class="fa fa-chevron-left"></i>'; 
$config['next_tag_open'] = '<li class="next">'; 
$config['next_tag_close'] = '</li>'; 
$config['next_link'] = '<i class="fa fa-chevron-right"></i>'; 
$config['cur_tag_open'] = '<li class="active"><a href="#">'; 
$config['cur_tag_close'] = '</a></li>'; 
$config['num_tag_open'] = '<li>'; 
$config['num_tag_close']='</li>'; 

$this->pagination->initialize($config); 

$this->data['pagination']=$this->pagination->create_links(); 

В изображении прикрепленного вы можете увидеть результаты.

Pagination problem

РЕШИТЬ: Добавление $ конфигурации [ 'use_page_numbers'] = TRUE; конфигурации постраничной и при выполнении запроса к базе данных 1 вычесть, чтобы страница 1 ищет LIMIT 0, 3 вместо LIMIT 3,3

+0

вы можете попробовать '$ config ['use_page_numbers'] = TRUE;' – Naumov

+0

Я добавил ваше предложение, а затем, когда фактически выполнял запрос к базе данных, вычитал 1 на номер страницы и работал.Это не самый стильный, но он работает. Благодарю. Положите это как ответ, и я буду голосовать. – Marcus

+0

Вы можете отредактировать мой ответ. Я очень плохо знаю английский. Я понимаю, но не могу правильно писать. – Naumov

ответ

0

Вы можете попробовать добавить в свой конфигурационный ключ своего массива $config['use_page_numbers'] = TRUE для получения номера страниц и не получать начальные номера в URL-адресе.

0

вы должны установить функцию контроллера для номера страницы, как 0, если

public function show_entries($page = 0) {   
    ---- 
    $config['use_page_numbers'] = TRUE; 
    $per_page=2; //what ever 
    $config["per_page"] = $per_page; 
    ----- 
} 
+0

У меня уже есть страница наверху, настроенная таким образом, и per_page извлекается из константы – Marcus

+0

, какова ваша цель с помощью этой разбивки на страницы? –

+0

Получите результаты на разных страницах вместо того, чтобы показывать 50 поставщиков на одной странице. – Marcus

0

Попробуйте использовать ниже код: -

$config['base_url'] = site_url('suppliers/' . $id); 

Если не работает, то добавьте ниже код также: -

$config['uri_segment'] = 4; 
$page = ($this->uri->segment($config['uri_segment'])) ? $this->uri->segment($config['uri_segment']) : 0; 
$data['topics_array'] = $this->forum->get_topics($id, $config['per_page'], $page); 
$data['pagination'] = $this->pagination->create_links(); 

См. Также link.

+0

Это не имеет смысла, codeigniter будет строить ссылки с текущей страницей поверх той, которая будет добавляться для каждой ссылки. – Marcus

+0

См. Ссылку ниже: - http://www.sitepoint.com/pagination-with-codeigniter/ –

1

Я думаю, проблема в base_url(). И вы можете использовать site_url() вместо base_url();, поэтому см. Разницу here.

Base_url - Это полный URL-адрес класса/функции контроллера, содержащей вашу разбивку на страницы. В приведенном выше примере он указывает на контроллер под названием «Тест» и функцию «страница». Имейте в виду, что вы можете использовать re-route your URI, если вам нужна другая структура.

$this->load->library('pagination'); 

$config['base_url'] = base_url().'/suppliers'; 
$config['total_rows'] = 200; 
$config['per_page'] = 20; 

$this->pagination->initialize($config); 

echo $this->pagination->create_links(); 

И, пожалуйста, прочитайте больше о pagination here.