2017-05-18 12 views
0

Codeigniter 3とPHPを使用するMySQLデータベースの結果を表示するWebアプリケーションを構築しました。すべてが期待どおりに動作しているため、ユーザーはページをナビゲートでき、ページあたりの正しい結果が表示されます。Codeigniterページネーションが多すぎる

私が持っている問題は、ページングナビゲーションバーには常にリンクが多すぎるようです。

たとえば、データベースから79レコードを返し、1ページに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'] = '&laquo; First'; 
    $config['first_tag_open'] = '<li class="prev page">'; 
    $config['first_tag_close'] = '</li>'; 
    $config['last_link'] = 'Last &raquo;'; 
    $config['last_tag_open'] = '<li class="next page">'; 
    $config['last_tag_close'] = '</li>'; 
    $config['next_link'] = 'Next &rarr;'; 
    $config['next_tag_open'] = '<li class="next page">'; 
    $config['next_tag_close'] = '</li>'; 
    $config['prev_link'] = '&larr; 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(); 

My URLの構造は次のとおりです。

items/index // displays results 1-10 
items/index/10 // displays results 11-20 
items/index/20 // displays results 21-30 
etc... 

助けていただければ幸いです。 おかげ

+0

'$ config ['uri_segment'] = 3;'を設定してみてください。 – Tpojka

答えて

1

この問題があります各ページのコード。

$config['total_rows'] = // number of pages returned here from db 

これは、表示するページ数を格納する必要があります。各メソッド内でページ設定を設定した場合は、これで十分です。あなたの例ではこれをやっています。

$config['total_rows'] = $this->db->get('item')->num_rows(); 

おそらく、間違っている各ページでこれを返信しています。

0

あなたはこの使用jqueryの後 を識別し、あなたの検索、ソート、レコードのように、すべての機能を持つデータテーブルを持つ簡単なテーブルを作成するために、テーブルにユニーク#IDを割り当てる最初のあなたがテーブル 内のすべてのレコードを表示datatable.js を試すことができますフッター部分にフッタ部分 負荷datatable.cssとdatatable.jsのページ 負荷のjQueryをナビゲートjqueryのための コード

$( '#のtable_idが')のdataTable();

+0

@trushar widetechの提案をありがとうが、これは私の質問に答えることはありません。 –

+0

ページネーションを避け、datatable.jsを使用して速くて簡単に開発することをお勧めします –

1

あなたは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をチェックする必要があります。

問題が発生した場合は教えてください。

+0

設定配列は適切な場所にあり、ページ設定を初期化する前に定義する必要があります。ここでsegmentは、渡されたURLのページ番号の位置です。 –

+0

うん、それは大丈夫です。チェックウイリーセグメント –

+0

申し訳ありませんが、これは動作しません。私のコントローラが現在https://pastebin.com/PxNr7HUwを見ている方法は次のとおりです。私はテストのために '$ segment'を' 2'に置き換えているのが分かります。 –

1

私は全く同じ問題を抱えています:リンクページが多すぎます。ちょうど10ページを表示する必要があるとき、それは最後の7つの空と17ページを表示しました。 私は他のスレッド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) - 1) * $config['per_page']) : 0; 

$data['page'] = ($this->uri->segment(4)) ? $this->uri->segment(4) : 0; 

私はそれを変更し、あなたがの次の行を変更する必要があるため、私の$config['uri_segment'] = 4;

関連する問題