2017-06-23 15 views
1

私はcodeigntier 3ページネーションライブラリを使用します。コード番号ページネーションが正しく機能しない

これは機能しますが、正確にはどのようにするべきではありません。

最初にコードを投稿します。

コントローラ設定

$config['base_url'] = base_url('items'); 
      $config['total_rows'] = $this->ItemsM->countAll(); 
      $config['per_page'] = 5; 
      $config['use_page_numbers'] = TRUE; 
      $config['nex_link'] = "Next"; 

      $limit = $config['per_page']; 
      $offset = $this->uri->segment(2); 

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


      $data = array(
       'musicians' => $this->ItemsM->allItems($limit, $offset), 
       'pagination' => $this->pagination->create_links() 
      ); 

      $this->load->view('public/header'); 
      $this->load->view('public/item-list', $data); 
      $this->load->view("public/footer"); 

モデル

ItemsMがCI_MODEL {

function allUsers($limit="", $offset ="") 
{ 
    $query = $this->db->select('*') 
        ->from('items') 
        ->limit($limit) 
        ->offset($offset) 
        ->order_by('creation_date', 'desc') 
        ->get(); 

    return $query->result(); 
} 

public function countAll(){ 
    return $this->db->count_all_results('items'); 
} 

ルート

を拡張するクラス210
$route['items/(:any)'] = 'items'; 

このページネーションは機能しますが、結果は正しくありません。最初のページ/タブで

それがこの順

項目1つの
項目2
項目3
項目4
項目5 // OK

が、開いているページ2

との項目を示しこの次の5つの結果が得られます

アイテム3
アイテム4
アイテム5
項目6
項目7

は、正直なところ、私は、問題がどこにあるか、私は誰かが知って理解して助けてくださいません。ありがとうございました。

+0

問題はあなたのSQLクエリであるようです。ページ2または次のページをクリックすると、オフセット2で結果が得られます。ページ番号として '$ offset'を渡していることを意味します。 id 2以降や2件の結果をスキップした後の結果を示しています。右 ? –

+0

ページ2のページ1の3つの結果を繰り返すような感じです。 –

+0

ええ、2ページ目では、最初の2つの結果をスキップしてitem3から開始します。 –

答えて

1

あなたの問題は、$offsetをページ番号として渡しているように、バリエール$offsetと思われます。あなたのページ番号が2の場合、2つの結果をスキップしますが、5つの結果をスキップする必要があります。これを解決するには、コントローラ設定でこのコードを置き換えてください。

$config['base_url'] = base_url('items'); 
     $config['total_rows'] = $this->ItemsM->countAll(); 
     $config['per_page'] = 5; 
     $config['use_page_numbers'] = TRUE; 
     $config['nex_link'] = "Next"; 

     $limit = $config['per_page']; 

     $page = $this->uri->segment(2); 

     if($page > 1){ 
      $offset = ($page-1) * $limit; 
     }else{ 
      $offset = $page; 
      // Or you can set $offset = 0; 
     } 

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


     $data = array(
      'musicians' => $this->ItemsM->allItems($limit, $offset), 
      'pagination' => $this->pagination->create_links() 
     ); 

     $this->load->view('public/header'); 
     $this->load->view('public/item-list', $data); 
     $this->load->view("public/footer"); 

ここであなたの変数$offsetを編集しました。これで、期待どおりの結果が得られます。

+0

Hm私は試してみましたが、それはページ、2,3などでうまくいきますが、ページ1ではSELECT * FROM 'items' LIMIT -5、5 ... –

+0

ああ、if文を使用する必要があるので、ちょっと待ってください。答えは –

+0

です。もう一度やり直してください。私は答えを編集しました –

関連する問題