0

好的,过去一个小时我一直在做这件事,我一生都无法弄清楚这一点。它说的是 LIMIT 2, 25 .. 这当然是跳过了应该显示的两行...我还在第 1 页上,链接甚至都不显示!第一页,我认为需要为 0、25,因为它显示了应该在第一页上显示的所有行。

现在我到目前为止只有 5 行,但它只显示了其中的 3 行……在我添加 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 个结果。

这是我生成这些的函数。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();
}

我现在的网址是 forum/category/2... 所以我假设页面会这样:第 1 页的 forum/category/2/1,第 2 页的 forum/category/2/2,等等对吗??所以我把 4 作为 URI 段,因为它在第 4 个参数位置。

任何帮助将非常感激...

编辑TTTTTTTT

好的,有人帮我解决了这个问题。但是,当我单击第 2 页时(我现在将限制降低到 5,并且当前有 7 个结果,因此它生成了第 2 页......它将 ID 2(类别 ID 为 2)替换为 5.. 而不是去到第 2 页??....第 2 页应该是这样的:forum/category/2/2... 但它却是这样的:forum/category/5

4

1 回答 1

2

您正在使用 2 个不同的 URI 段。您正在使用 4 初始化分页对象,然后将段 3 发送到get_topics()(因为$this->uri->segment(3))。您可能应该对两者都使用 3,因为 URI 段从 0 而不是 1 开始。

无论哪种方式,无论您使用 3 还是 4,都应该在两个地方使用相同的一个。使用$this->uri->segment($config['uri_segment'])而不是$this->uri->segment(3).

于 2013-01-11T17:59:46.527 回答