2012-08-14 54 views
0

这是我在CI中分页的第一次尝试,我面临一个小问题,可能是由路由引起的。CodeIgniter - 路由和分页

我的规则如下:

$route['User/(:num)/(:any)'] = 'User/index/$1'; 
$route['user/(:num)/(:any)'] = 'User/index/$1'; 

那些被翻译成类似http://site.com/index.php/user/1/tomek。现在

我的分页器:

$config['base_url'] = site_url('user').'/'.$user.'/'.$data['user'][0]['nick'].'/'; 
$config['total_rows'] = $this->rating_model->countOwned($user); 
$config['per_page'] = 2; 
$config['enable_query_strings'] = true; 
$this->pagination->initialize($config); 
... 
$data['owns'] = $this->rating_model->getOwned($data['user'][0]['id'],$config['total_rows'],$config['per_page']); 

在我的模型,我用简单的limit

public function getOwned($user,$limit,$start) { 
    $this->db->limit($limit,$start); 
    ... 

链接和一切工作正常,但他们不工作。我得到的网址类似于http://site.com/index.php/user/1/tomek/2,但是项目仍然完好无损。我的错误在哪里?

编辑>完整的控制器代码:

public function index($user = null) { 
     $session_data = $this->session->userdata('user_data'); 
     $this->db->cache_off(); 

     if($session_data) : 

      $this->load->helper(array('form', 'url')); 
      $this->load->library('pagination'); 
      $this->load->model('user_model'); 
      $this->load->model('rating_model'); 
      $this->load->model('games_model'); 

      if($user) { 
       $user = $user; 
      } else { 
       $user = $session_data['id']; 
      } 

      //vars 
       $data['user'] = $this->user_model->getUser($user); 
       $data['title'] = $data['user'][0]['nick'].' · Profil użytkownika'; 
       $data['age'] = $this->user_model->getAge($data['user'][0]['birth']); 
       $data['sex'] = $this->user_model->getSex($data['user'][0]['sex']); 

       $config['base_url'] = site_url('user').'/'.$user.'/'.$data['user'][0]['nick'].'/'; 
       $config['total_rows'] = $this->rating_model->countOwned($user); 
       $config['per_page'] = 4; 
       $config['enable_query_strings'] = true; 
       $this->pagination->initialize($config); 

       $data['pages'] = $this->pagination->create_links(); 

       $data['rates'] = $this->rating_model->countRates($user); 
       $data['rates2'] = $this->rating_model->countGrades($user); 

       $data['developers'] = $this->games_model->getDevelopers(); 
       $data['genres'] = $this->games_model->getGenres(); 
       $data['platforms'] = $this->games_model->getPlatforms(); 

       $data['nowPlaying'] = $this->rating_model->getNowPlaying($data['user'][0]['id']); 

       $data['owns'] = $this->rating_model->getOwned($data['user'][0]['id'],$config['total_rows'],$config['per_page']); 

       //load 
       $this->template->load('template','theme/yourAccount/main', $data); 

     else : 

       $this->load->view('unlogged'); 

     endif; 
    } 
+0

哪里是'uri-> segment'? – 2012-08-14 09:08:24

+0

应将第四个uri段传递给模型中的'$ start'。它发生了吗?如果是的话,你过得怎么样? – 2012-08-14 09:11:19

+0

我不'通过第四部分。我怎样才能做到这一点?我正在关注CI的教程(http://codeigniter.com/user_guide/libraries/pagination.html)。 – 2012-08-14 09:44:43

回答

0

以下网址 “http://site.com/index.php/user/1/tomek/2” 需要: $航线[“用户/ (:num)/(:any)/(:num)'] ='用户/索引/ $ 1/$ 2/$ 3';

您可能会将索引留在路线之外。因为这是它所调用的标准功能。

+0

我添加了此路线,但没有帮助。 – 2012-08-14 09:45:40

+0

你可以发布你完整的用户控制器代码吗? – Jurgo 2012-08-14 09:47:21

+0

它到达您的索引功能吗?你放置了一个die()并测试了吗? – Jurgo 2012-08-14 10:14:39

0

问题实际上是在uri_segment。我必须指出,url的哪一部分是页码。像这样:$config['uri_segment'] = 5;我用我的页面加载:

$data['owns'] = $this->rating_model->getOwned($data['user'][0]['id'],4,$this->uri->segment(5)); 

很好用。感谢大家的帮助!

0

希望这会有所帮助。分页中的2个重要因素是uri段和查询的极限偏移量。如果您尝试完成$ config(不需要那些用于格式化的),比如$ cofig ['uri_segment'],它也可以帮助您。

尝试检查此链接并检查结构和算法,这可能有所帮助。 Codeigniter, setting up pagination