【问题标题】:codeigniter pagination not working as expectedcodeigniter 分页没有按预期工作
【发布时间】:2010-12-01 20:24:01
【问题描述】:

我尝试了很多,但似乎无法弄清楚这一点,感谢任何帮助。我的文章有投票,我有一个页面应该显示投票最多的文章。顺便说一句,我正在使用codeigniter。 控制器:

function most_voted()
    {
        $per_page = 3;
        $cur_page = $this->uri->segment(4);
        /*
        if($cur_page == "") $cur_page = 1;
        else $cur_page = (integer)$cur_page;
        */
        $offset = ($cur_page - 1) * $per_page;
        if($offset < 0) $offset = 0;
        $this->load->model('article_model');
        $result_rows = $this->article_model->GetMostVoted($per_page,$cur_page);
        $total_rows = sizeof($result_rows) + 10;
        echo "total rows is : ".$total_rows.'<br>';
        echo "cur page is   : $cur_page <br>";

        //$this->load->library('pagination');
        $config['base_url'] = base_url().'articles/most_voted/page/';
        $config['uri_segment'] = 4;
        $config['num_links'] = 3;
        $config['first_link'] = '<<First';
        $config['last_link'] = 'Last>>';
        $config['prev_link'] = '< Previous';
        $config['next_link'] = 'Next >';
        $config['total_rows'] = $total_rows;
        $config['per_page'] = $per_page;
        $this->pagination->initialize($config);


        $data['articles'] = $result_rows;
        $data['view_file_name'] = 'articles/all_articles_view';
        $this->load->view('includes/template',$data);
        //echo $this->db->last_query();
    }

型号:

function GetMostVoted($limit,$offset)
    {
        $this->db->order_by('votes','desc');
        $q=$this->db->get('cgh_articles',$limit,$offset);
        if($q->num_rows() > 0)
        {
            foreach($q->result() as $row)
            {
                $data[] = $row;
            }
            return $data;
        }
    }

问题: 问题是虽然我得到了像 但点击 2 转到 url:page/3 点击 3 转到 url:page/6 点击 4 转到 url : page/9 等等。 我想单击 2 转到 page/2,单击 3 转到 page/3,依此类推。关于出了什么问题的任何建议?

如果您需要更多信息,请告诉我,谢谢。

【问题讨论】:

    标签: codeigniter pagination


    【解决方案1】:

    分页类的工作方式是它返回页面应该开始的项目。

    例如, url : hostanme/controller/page/9 表示页面应该从第 9 多票的文章开始呈现。请参阅codeigniter documentation 中的示例。

    另外,你有$total_rows = sizeof($result_rows) + 10;。这是为什么呢?

    【讨论】:

    • 谢谢,jd。 sizeof($result_rows) + 10 只是一个我暂时硬编码的整数。我将用返回的实际结果数替换它。所以,你的意思是默认的 ci 分页不会给我想要的?
    • 听起来你想要一些不同的东西。但是,如果您考虑一下,Codeigniter 库的工作方式是一种很好的做法:它会准确地告诉您应该从哪个项目开始渲染页面,因此您不必自己弄清楚。
    • 我明白了你的意思,现在明白了分页库是如何工作的(虽然,我在 ci 用户文档的任何地方都看不到这一点)。但老实说,我不想在我的网站上有这个,因为如果它确实让我感到困惑,它会让我的最终用户更加困惑。如果您单击 3、7 = 7 等等,大多数网站、论坛都会从用户 pov 转到第 3 页,甚至 SO。所以我想我必须写一些与 ci 不同的东西?
    • 根据我在这个 ci 论坛 (codeigniter.com/forums/viewthread/126839) 上阅读的内容,分页文档不正确,所以我想,如果您遇到与我类似的问题,您需要重新编写/修改分页库
    • 我刚刚发现了这个 (stackoverflow.com/questions/2274357/…),任何试图弄清楚是否需要访问数据库两次才能获得 $config['total_rows'] 的人可能会感兴趣。至于我最初的需要,我将编写自己的分页库/修改原始库
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多