[英]Codeigniter Pagination Displaying Too Many Links
我使用 Codeigniter 3 和 PHP 構建了一個 Web 應用程序來顯示來自 MySQL 數據庫的結果。 一切都按預期工作,因為分頁成功地允許用戶導航頁面,並顯示每頁正確數量的結果。
我的問題是分頁導航欄上的鏈接似乎總是太多。
例如,我將從我的數據庫中返回 79 條記錄,每頁顯示 10 條。 那么,分頁中應該只顯示 8 個鏈接,對嗎? 相反,我可以看到 18 個鏈接。 從 9 到 18 的鏈接將我帶到一個空白頁面。
我的控制器代碼如下;
public function index() {
$config['base_url'] = '/items/index';
$config['use_page_numbers'] = FALSE;
$config['reuse_query_string'] = TRUE;
$config['total_rows'] = $this->db->get('item')->num_rows();
$config['per_page'] = 10;
$config['num_links'] = 10;
$config['full_tag_open'] = '<div><ul class="pagination">';
$config['full_tag_close'] = '</ul></div><!--pagination-->';
$config['first_link'] = '« First';
$config['first_tag_open'] = '<li class="prev page">';
$config['first_tag_close'] = '</li>';
$config['last_link'] = 'Last »';
$config['last_tag_open'] = '<li class="next page">';
$config['last_tag_close'] = '</li>';
$config['next_link'] = 'Next →';
$config['next_tag_open'] = '<li class="next page">';
$config['next_tag_close'] = '</li>';
$config['prev_link'] = '← Previous';
$config['prev_tag_open'] = '<li class="prev page">';
$config['prev_tag_close'] = '</li>';
$config['cur_tag_open'] = '<li class="active"><a href="">';
$config['cur_tag_close'] = '</a></li>';
$config['num_tag_open'] = '<li class="page">';
$config['num_tag_close'] = '</li>';
$config['anchor_class'] = 'follow_link';
$this->load->library('pagination');
$this->pagination->initialize($config);
$data = array(
'items' => $this->items_model->itemList()
);
$this->load->view('item_list', $data);
}
我的觀點如下;
echo $this->pagination->create_links();
我的網址結構如下;
items/index // displays results 1-10
items/index/10 // displays results 11-20
items/index/20 // displays results 21-30
etc...
任何幫助表示贊賞。 謝謝
我有一個完全相同的問題:顯示太多鏈接頁面。 當只應顯示10頁時,它將顯示17頁,最后7頁為空。 我從另一個線程遵循這個答案: https : //stackoverflow.com/a/21657962 。 因此,我基本上將其復制並粘貼以更改以前的配置。
這是我以前的代碼,導致錯誤:
$config['full_tag_open'] = '<ul class="pagination">';
$config['full_tag_close'] = '</ul>';
$config['first_link'] = false;
$config['last_link'] = false;
$config['first_tag_open'] = '<li>';
$config['first_tag_close'] = '</li>';
$config['prev_link'] = '«';
$config['prev_tag_open'] = '<li class="prev">';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '»';
$config['next_tag_open'] = '<li>';
$config['next_tag_close'] = '</li>';
$config['last_tag_open'] = '<li>';
$config['last_tag_close'] = '</li>';
$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>';
刪除所有內容,並使用上述代碼中的代碼進行更改:
$config['full_tag_open'] = "<ul class='pagination'>";
$config['full_tag_close'] ="</ul>";
$config['num_tag_open'] = '<li>';
$config['num_tag_close'] = '</li>';
$config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
$config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
$config['next_tag_open'] = "<li>";
$config['next_tagl_close'] = "</li>";
$config['prev_tag_open'] = "<li>";
$config['prev_tagl_close'] = "</li>";
$config['first_tag_open'] = "<li>";
$config['first_tagl_close'] = "</li>";
$config['last_tag_open'] = "<li>";
$config['last_tagl_close'] = "</li>";
然后我也碰巧遇到另一個問題:結果重復,最后一頁重復其他數據,使每頁全行。
我以前的代碼:
$data['page'] = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0;
我將其更改為:
$data['page'] = ($this->uri->segment(4)) ? (($this->uri->segment(4) - 1) * $config['per_page']) : 0;
僅作記錄:my $config['uri_segment'] = 4;
此問題是因為您需要為每個頁面更改以下代碼行;
$config['total_rows'] = // number of pages returned here from db
這需要存儲您希望顯示的頁面數。 如果您在每種方法中都設置了分頁配置,則應該很容易做到。 在您的示例中,您正在執行此操作;
$config['total_rows'] = $this->db->get('item')->num_rows();
大概您在每個頁面上都返回了此錯誤信息。
每當要在Codeigniter中實現分頁時,您都需要記住兩件事:
與頁面生成相關的第一件事配置實際上是:
// Loads pagination library
$this->load->library('pagination');
// @params $url = your controller + method path
$config['base_url'] = base_url() . $url;
// @params $totalRows = Total result found in query
$config['total_rows'] = $totalRows;
// @params $perPage = In your case it is 50
$config['per_page'] = $perPage;
// @params $segment = This is what you are missing in your code. Segment is the factor from where system reads which page records need to be shown
$config['uri_segment'] = $segment;
$this->pagination->initialize($config);
與設計部分有關的第二個東西分頁配置:
$config['full_tag_open'] = '<ul class="pagination pagination-sm m-t-none m-b-none">';
$config['full_tag_close'] = '</ul>';
$config['prev_link'] = '<i class="fa fa-chevron-left"></i>';
$config['prev_tag_open'] = '<li>';
$config['prev_tag_close'] = '</li>';
$config['next_link'] = '<i class="fa fa-chevron-right"></i>';
$config['next_tag_open'] = '<li>';
$config['next_tag_close'] = '</li>';
$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>';
$config['first_tag_open'] = '<li>';
$config['first_tag_close'] = '</li>';
$config['last_tag_open'] = '<li>';
$config['last_tag_close'] = '</li>';
$config['first_link'] = '<i class="fa fa-chevron-left"></i> <i class="fa fa-chevron-left"></i>';
$config['last_link'] = '<i class="fa fa-chevron-right"></i><i class="fa fa-chevron-right"></i>';
$this->pagination->create_links();
這是我在項目中一直在使用的運行腳本。 工作正常。 您需要檢查初始化期間傳遞的uri_segment 。
讓我知道您是否遇到任何問題。
您可以嘗試使用datatable.js,首先在表中顯示所有記錄,然后在表中分配唯一的#id以便進行標識,然后使用jquery創建具有數據表的簡單表,該表具有所有功能,例如搜索排序記錄導航頁在頁腳中加載jquery,在頁腳中加載datatable jQuery的頁腳部分代碼中的.css和datatable.js
$('#table_id')。dataTable();
問題是 per_page, total_rows 在我的情況下我解決了它:
$page = 0;
$per_page = 8;
$config["total_rows"] = $this->db->get('item')->num_rows();
$config["total_rows"] = $config["total_rows"]/$per_page;
$config["per_page"] = 1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.