0

わかりました、私は過去1時間これに取り組んでいましたが、私の人生ではこれを理解することはできません. それは LIMIT 2, 25 と言っています..もちろん、表示されるべき 2 つの行をスキップしています...私はまだ 1 ページにいますが、リンクも表示されません! 最初のページには、最初のページに表示する必要があるすべての行が表示されるため、0、25 である必要があると思います。

これまでのところ5行しかありませんが、そのうち3行しか表示されていません...最初の2行は、LIMIT句を追加するまでクエリが最初に生成したことを示していません。プログラミングに関して私が持っているものは次のとおりです。

    public function category($id, $page = NULL) {
    //grab topics
    parent::before();
    $data['forum_title'] = $this->forum->get_cat($id);
    $data['id'] = $id;

    $config = array();
    $config['base_url'] = base_url() . 'forum/category/';
    $config['total_rows'] = $this->forum->topic_count($id);
    $config['per_page'] = 25;
    $config['uri_segment'] = 4;

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

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

    $data['links'] = $this->pagination->create_links();
    $this->load->view('forum/category', $data);
    parent::after();
}

私はURI_SEGMENTの試練を理解していないことを認めます..私はちょっと理解していますが、実際にはそうではありません. これを生成するためのチュートリアルに従っていました。しかし、私は $limit と $start 変数を印刷し、制限は本来あるべきように 25 ですが、開始は 2.. と印刷されますが、最初のページでは 0 であるべきだと思います。まだ 25 件の結果が得られていないため、2 ページ目も存在しないはずです。

これがそれらを生成するための私の関数です。count_all_results() 関数が機能します (合計 5 つの結果が返されます)。しかし、LIMIT 句を追加するたびに get_topics() 関数が正しく機能しません。

//count the topics in a certain category id for pagination
public function topic_count($id) {
    $this->db->where('cat_id', $id);
    $this->db->from('forum_topic');

    return $this->db->count_all_results();

}
//get all topics in a certain category
public function get_topics($id, $limit, $start) {
    $this->db->distinct();
    $this->db->select('t.id, t.title, t.sticky, t.locked, u.username as author, COUNT(p.id) as postcount, (SELECT u.username
        FROM forum_post fp
        INNER JOIN user u ON fp.author_id = u.user_id
        WHERE fp.topic_id = t.id
        ORDER BY fp.date DESC
        LIMIT 1) as lposter, (SELECT fp.date
        FROM forum_post fp
        WHERE fp.topic_id = t.id
        ORDER BY fp.date DESC
        LIMIT 1) as lastdate');
    $this->db->from('forum_topic t');
    $this->db->join('user u', 'u.user_id = t.author_id', 'inner');
    $this->db->join('forum_post p', 'p.topic_id = t.id', 'inner');
    $this->db->where('t.cat_id', $id);
    $this->db->group_by('t.id, t.title, t.sticky, t.locked, author, lposter, lastdate');
    $this->db->order_by('t.sticky desc, p.date desc');
    $this->db->limit($limit, $start);
    return $this->db->get()->result();
}

私が現在アクセスしている URL は forum/category/2 です。したがって、ページは次のようになると想定しています。ページ 1 はフォーラム/カテゴリ/2/1、ページ 2 はフォーラム/カテゴリ/2/2など 正しい?? 4 番目の引数の位置にあるため、URI セグメントとして 4 を指定します。

どんな助けでも大歓迎です...

編集TTTTTTTT

わかりました誰かがこれで私を助けてくれました。ただし、ページ 2 をクリックすると (現時点では制限を 5 に下げ、現在 7 つの結果があるため、ページ 2 が生成されます... ID 2 (カテゴリ ID 2) が 5 に置き換えられます。ページ 2 へ??.... ページ 2 は次のようになります。

4

1 に答える 1

2

2 つの異なる URI セグメントを使用しています。get_topics()ページネーション オブジェクトを 4 で初期化してから、セグメント 3 を(なぜなら)に送信しています$this->uri->segment(3)。URI セグメントは 1 ではなく 0 から始まるため、おそらく両方に 3 を使用する必要があります。

いずれにせよ、3 を使用する場合でも 4 を使用する場合でも、両方の場所で同じものを使用する必要があります。$this->uri->segment($config['uri_segment'])の代わりに使用し$this->uri->segment(3)ます。

于 2013-01-11T17:59:46.527 に答える