CodeIgniter分页不会超过第一页

时间:2015-02-05 01:38:59

标签: php codeigniter

我有一个帖子的博客页面,我试图使用CodeIgniter进行分页。编号和限制似乎工作正常,但我在尝试前往另一页时仍然获得404。

奇怪的是造成这个问题的正常罪魁祸首是正确的。 baseUrl和uri_segment。

我的控制器看起来像这样:

$config                = array();
$config["base_url"]    = $this->config->site_url("/blog");
$config["total_rows"]  = $this->blog_model->count();
$config["per_page"]    = 2;
$config["uri_segment"] = 2;
$config["num_links"] = round($config["total_rows"] / $config["per_page"]);

$config['use_page_numbers'] = TRUE;

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

$this->load->view('blog', array(
    'user' => $this->user,
    'blog' => $this->blog_model->loadPosts($config['per_page'], $page),
    'links' => $this->pagination->create_links(),
    'footer' => $this->blog_model->loadFooter()
));

然后在我的模型中我抓住帖子

public function loadPosts($limit, $start)
{
    $this->db->limit($limit, $start);
    $this->db->order_by("date", "desc");
    //this loads the contact info
    $query = $this->db->get('entries');
    return $query->result();
}

我的完整网址为www.mysite.com/blog,然后在分页时显示为www.mysite.com/blog/2

对于base_Url,我也尝试了base_url() . "/blog";

我尝试将uri_segment设置为1和3,但似乎没有任何效果。

我也尝试过使用路由,并添加了以确定它是否可以执行任何操作:

$route['blog/(:num)'] = 'blog/$1';

5 个答案:

答案 0 :(得分:5)

如果你的代码在索引方法中,你可以使用这行代码:

  

$ route [' blog /:any'] =" blog / index / $ 1&#34 ;;

因为您使用了 细分(2) ,所以您应该将博客/索引/ $ 1 更改为博客/ :任何

答案 1 :(得分:4)

假设包含您的分页代码的函数名是index(),您应该将路由更改为:

$route['blog/(:num)'] = 'blog/index/$1';

在index()函数中,添加$ page参数:

public function index($page = 1){
...

答案 2 :(得分:3)

根据您的路线,请尝试添加尽可能多的:any:num s,然后根据需要添加:

$route['blog'] = 'blog/index'; // For the first level
$route['blog/(:any)/(:any)'] = 'blog/index/$1/$2'; // For extra "uri" segments.

// base_url pagination

$config["base_url"] = base_url("blog"); // Is preferred

答案 3 :(得分:2)

您无法将参数传递给控制器​​的index()函数,就像它是随机函数一样。

如果您尝试执行controller / var而不是controller / function / var,CodeIgniter将在控制器内搜索不存在的函数var()。当您尝试访问blog/2时会发生这种情况:2()不是控制器中的函数。

您可以在控制器中创建一个新功能,让我们说一下page(),然后将代码移到里面。这样,您将致电blog/page/2。函数page()将存在,并且不会获得404.也不要为了重新定义你的base_url以进行分页。

$config["base_url"] = site_url("blog/page");

另一种解决方案,如果您绝对需要像/blog/2这样的网址,路由:

$route['blog/(:any)'] = 'blog/index/$1'; 

重新映射也可能是一个解决方案:http://www.codeigniter.com/user_guide/general/controllers.html#remapping

答案 4 :(得分:2)

您可以保留其他代码。只需在routes.php文件中添加:

$route['blog/:num'] = "blog/index";
//Assumes your code is inside the index method.
//If not, use this way:
//$route['blog/:num'] = "blog/YOUR_METHOD_NAME";