5

これは非常に厄介な問題です。コードイグナイターのページネーションが設定されているので、うまくいくと思いましたが、よく見ると、最後のページで以前の結果を引き込んでページを埋めているようです。

たとえば、1 ページあたり 10 個の結果が必要で、14 個の結果があるとします。最初のページには 10 件の結果があり、2 ページ目も同様です。あるべきときは、最初のものは 10 で、2 番目のものは 4 です。1 つの結果を繰り返すだけなら問題ないのですが、前の 6 つの結果をスクロールしなければならないのは面倒です。どんな助けでも大歓迎です。

私のコントローラーには、ページネーションコードがあります

$config = array();
$config["base_url"] = base_url()."myStories/".$id;
$config["total_rows"] = $this->data_model->my_count();
$config["per_page"] = 10;
$config["uri_segment"] = 3;
$config['num_links'] = 2;
$choice = $config["total_rows"] / $config["per_page"];
//$config["num_links"] = round($choice);

$this->pagination->initialize($config);
$page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;

$this->load->view('userStory_view', array(
    'query' => $this->data_model->pullMyStories($config['per_page'], $page),
    'links' => $this->pagination->create_links(),
    'user' => $this->users_model->getUser($this->user->user_id),
)); 

そして、私のモデルでは、カウントがあり、実際の結果が返されます

public function my_count() {
        //This counts all the stories that belong to that author
        $author = $this->uri->segment(2);
        $this->db->where('author', $author);
        $this->db->where(array('approved !=' => 'd'));
        $query = $this->db->get('story_tbl');
        return $query->num_rows();
       }

    public function pullMyStories($limit, $start){
        //This pulls back all the stories that belong to that author
        $this->db->limit($limit, $start);
        $this->db->order_by("date", "desc");
        $author = $this->uri->segment(2);
        $this->db->where(array('approved !=' => 'd'));
        $this->db->where('author', $author);
        $story = $this->db->get('story_tbl');
        return $story->result();    
    }

私が設定したルートは機能します

$route['myStories/(:any)'] = "story/viewStories/$1";

最初はカウントが間違っていると思っていたのですが、14回カウントしても20回の結果が返ってきました。

詳細については、baseUrl が正しいことを確信しています。.htaccess を変更して index.php を削除し、ルート ファイルを編集してコントローラーを URL から削除しました。ユーザーが覚えやすいようにします。

また、URI セグメントが正しいことも確信しています。それらが正しくない場合、私のページはまったく表示されません。

すべての通常の解決策を試しましたが、何も機能しませんでした。それが、私がここで質問している理由であり、この質問に賞金をかけた理由です。

4

8 に答える 8

2
var $base_url           = ''; // The page we are linking to
var $prefix             = ''; // A custom prefix added to the path.
var $suffix             = ''; // A custom suffix added to the path.

var $total_rows         =  0; // Total number of items (database results)
var $per_page           = 10; // Max number of items you want shown per page
var $num_links          =  2; // Number of "digit" links to show before/after the currently viewed page
var $cur_page           =  0; // The current page being viewed
var $use_page_numbers   = FALSE; // Use page number for segment instead of offset
var $first_link         = 'First';
var $next_link          = '->';
var $prev_link          = '<-';
var $last_link          = 'Last';
var $uri_segment        = 2;
var $full_tag_open      = '';
var $full_tag_close     = '';
var $first_tag_open     = '';
var $first_tag_close    = ' ';
var $last_tag_open      = ' ';
var $last_tag_close     = '';
var $first_url          = ''; // Alternative URL for the First Page.
var $cur_tag_open       = '&nbsp;<strong>';
var $cur_tag_close      = '</strong>';
var $next_tag_open      = '&nbsp;';
var $next_tag_close     = '&nbsp;';
var $prev_tag_open      = '&nbsp;';
var $prev_tag_close     = '';
var $num_tag_open       = '&nbsp;';
var $num_tag_close      = '';
var $page_query_string  = FALSE;
var $query_string_segment = 'per_page';
var $display_pages      = TRUE;
var $anchor_class       = '';
于 2013-07-22T17:29:21.023 に答える
1

問題は、間違ったパラメーターをpullMyStoriesメソッドに渡していることです。最初のページで、クエリに次の制限を適用します

LIMIT 0,10

続いて2ページ目に

LIMIT 1,10

それから3番目に

LIMIT 2,10

したがって、ページネーションは、一度に 10 個ではなく 1 個のアイテムのみを進めます。 したがって、これを変更する必要があります

'query' => $this->data_model->pullMyStories($config['per_page'], $page),

これに

'query' => $this->data_model->pullMyStories($config['per_page'], ($page * $config['per_page'])),
于 2013-07-19T16:15:54.980 に答える
0

これを試して。base_urlを正しい方法で変更するだけです。また、uri_segment の正しい数値を取得しているかどうかも注意して確認してください。そうでない場合は、番号を変更して正しい値を取得できます。

    // $config = array();
    // MUST CHNGE IT I just tell the with simple example. If you have index.php, c name and method name.
    $config["base_url"] = base_url()."index.php/controller_name/function_name/"; 
    $config["total_rows"] = $this->data_model->my_count();
    $config["per_page"] = 10;
    $config["uri_segment"] = 3; // BE CARFULL with uri_segment. You need to print it, and be shre that you are getting the right number
    $config['num_links'] = 2;


    $this->pagination->initialize($config);
    $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;

    $this->load->view('userStory_view', array(
        'query' => $this->data_model->pullMyStories($config['per_page'], $page),
        'links' => $this->pagination->create_links(),
        'user' => $this->users_model->getUser($this->user->user_id),
    ));

コードを更新し、コメントして $config = array(); 今日、これを自分のコンピューターで実行しましたが、動作します。何百回もチェックしたかもしれませんが、詳細をもう一度チェックしてください。

私の例で更新:

function index() {

        $data['page_title'] = "Items";

        $config['base_url']         = base_url() .'index.php/items/index/';
        $config['total_rows']       = $this->items_model->count_items(); // Count items from DB
        $config['per_page']         = 10; 
        $config['uri_segment']      = 3;
        // Customize 
        $config['next_link']        = FALSE;
        $config['prev_link']        = FALSE;
        $config['first_link']       = 'first';
        $config['last_link']        = 'last';
        $config['cur_tag_open']     = '<a class="current">';
        $config['cur_tag_close']    = '</a>';

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

        $page                       = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
        $data['items']              = $this->items_model->get_items($config["per_page"], $page);


        $this->load->view('invoice-items', $data);

    }
于 2013-07-19T17:00:12.847 に答える
0

私は最近、ciのページネーションについて一生懸命努力しました。

あなたのコードは正しいと思います。

2 ページ目の正確な uri 文字列は何ですか?.そして、このリスト関数は index() ですか?

于 2013-07-19T07:15:54.860 に答える
0

コントローラーで:

$page = $this->uri->segment(3,0);

それで:

public function pullMyStories($limit, $start){

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

$this->db
  ->select('*')
  ->where('approved !=', 'd')
  ->where('author', $author)
  ->order_by('date', 'DESC')
  ->limit($limit, $start);

$story = $this->db->get('story_tbl');

return $story->result(); 

また、以下の行を使用してライブラリをどこにロードしますか?

$this->load->library('pagination');   
于 2013-07-21T21:34:22.007 に答える
0

私はこれを投げ入れて、何らかの形で役立つことを願っています. テストのために次の仮定を行いました。

  • id (コントローラーの "myStories/".$id のように) は$this->uri->segment(2)から取得されます
  • 私が作成したstory_tblフィールドは、id、author、dateでした

私のテストファイルは次のとおりです。

コントローラMyStories.php :

    public function index()
    {
            //loading library, model, and assumptions
        $this->load->library('pagination');
        $this->load->model('m_page', 'data_model');
        $id = $this->uri->segment(2);
        //
        //
        //Your code from here...
        //
        //
        $config = array();
        $config["base_url"] = $this->config->site_url("myStories/".$id);
        $config["total_rows"] = $this->data_model->my_count();
        $config["per_page"] = 3;
        $config["uri_segment"] = 3;
        $config["num_links"] = round($config["total_rows"] / $config["per_page"]);

        $this->pagination->initialize($config);
        $page = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;

        $data = array();
        $data['query'] = $this->data_model->pullMyStories($config['per_page'], $page);
        $data['links'] = $this->pagination->create_links();
        $data['config'] = $config;
        //$data['user'] = $this->users_model->getUser($this->user->user_id);
        $this->load->view('userStory_view', $data);     
    }

ところで、ページネーション base_url を定義するときは、base_url ではなく、 site_urlを使用する必要があります。

また、コントローラーの「ユーザー」データをコメントアウトしました。これは、あなたがそれに関する情報を提供したことがないという理由だけです。

私のテスト ビュー、userStory_view.php :

<?php echo $links;?>
<!-- -->
<hr>
total rows: <?php echo $config['total_rows'];?>
<hr>
<?php echo $this->db->last_query();?>
<hr>
<!-- -->
<?php foreach ($query as $row):?>
<?php echo $row->author.'<hr>';?>
<?php endforeach;?>

私はあなたのモデルに変更を加えていないので、ここでそれを示す必要はありません.

次の行をroutes.phpに追加しました:

$route['myStories/(:any)'] = "myStories";

私が言ったように、すべてがうまくいきました。書式設定以外に実際に行った唯一の変更は、base_url() の代わりに site_url() を使用したことと、ユーザー データにコメントを付けたことです。なぜあなたが問題を抱えているのか、私は恐れています。

于 2013-07-22T03:47:18.550 に答える