我有一个帖子的博客页面,我试图使用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';
答案 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";