在CI的分页中,数据索引应遵循偏移量。例如:如果限制为10,那么第二个索引应该有10个偏移量,这意味着索引将从11到20开始。
我遵循了一些教程,但我仍然无法让这个偏移的东西正常工作。 每次点击不同的分页索引时,我的索引始终重置为1 。
这是我的分页代码注意,我试图回应$offset
,值为 true (第二个索引= 10,第三个index = 20,$limit
= 10)所以我不知道为什么它不起作用:
public function index($offset = 0) {
//check authorization
if(!isset($_SESSION['username']))
redirect('backend_umat/login');
// the $offset value is true, but the index is still reseted to 1
echo $offset;
$limit = 10;
$result = $this->umat_m->get_umat($limit, $offset);
//pagination
$config['base_url'] = site_url('/backend_umat/index');
$config['total_rows'] = $result['num_rows'];
$config['per_page'] = $limit;
$config['uri_segment'] = 3;
$config['full_tag_open'] = '<div id="pagination">';
$config['full_tag_close'] = '</div>';
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
这是我的模特:
public function get_umat($limit, $offset) {
$this->db->select('*')->from('msumat')->limit($limit, $offset)->
join('mskelas', 'msumat.kelas_id = mskelas.kelas_id');
$q = $this->db->get();
$result['rows'] = $q->result();
$result['num_rows'] = $this->db->select('*')->from('msumat')->
join('mskelas', 'msumat.kelas_id = mskelas.kelas_id')
->get()->num_rows();
return $result;
感谢您的帮助:D
答案 0 :(得分:1)
public function index() {
//check authorization
if(!isset($_SESSION['username']))
redirect('backend_umat/login');
// the $offset value is true, but the index is still reseted to 1
//pagination
$config['base_url'] = base_url().'backend_umat/index';
// basically you need a separate query to return only numrows
$config['total_rows'] = ?;
$config['per_page'] = 10;
$config['uri_segment'] = 3;
$config['full_tag_open'] = '<div id="pagination">';
$config['full_tag_close'] = '</div>';
$this->pagination->initialize($config);
$offset = ($this->uri->segment(3)) ? $this->uri->segment(3) : 0;
$result = $this->umat_m->get_umat( $config['per_page'], $offset);
$data['pagination'] = $this->pagination->create_links();
在这里尝试一下,我改变了一些代码希望这个有效。基本上我首先将分页配置初始化,然后从模型中调用任何内容。只需单独查询即可获得数量。
答案 1 :(得分:1)
控制器
site.com/<controller>/index/<page>
public function index($offset = 0) {
//check authorization
if(!isset($_SESSION['username']))
redirect('backend_umat/login');
$limit = 10;
$offset = (int) $offset;
$result = $this->umat_m->get_umat($limit, $offset);
//pagination
$config['base_url'] = site_url('/backend_umat/index');
$config['total_rows'] = $result['num_rows'];
$config['per_page'] = $limit;
$config['uri_segment'] = 3;
$config['full_tag_open'] = '<div id="pagination">';
$config['full_tag_close'] = '</div>';
$this->pagination->initialize($config);
$data['pagination'] = $this->pagination->create_links();
模型
public function get_umat($limit, $offset) {
$result['rows'] = $this->db
->select('SQL_CALC_FOUND_ROWS, msumat.*, mskelas.*', FALSE)
->limit($limit, $offset == 1 ? 0 : $offset)
->join('mskelas', 'msumat.kelas_id = mskelas.kelas_id')
->get('msumat')
->result();
$req = $this->db->query('SELECT FOUND_ROWS()')->row_array();
$result['num_rows'] = $req['FOUND_ROWS()'];
return $result;
}
如果请求不包含LIMIT语句,则不必重写第二个sql req,可以使用SQL_CALC_FOUND_ROWS
检索总数。但这可能比两个请求慢。
我在FALSE
中使用select()
作为第二个参数,以便CI不会尝试使用反引号来保护字段或表名。
->select('*')
:如果您想要所有字段,则无用,如果未调用select方法,CI将默认执行此操作。
->get()->num_rows()
:改为使用->count_all_results([table])
。
答案 2 :(得分:0)
首先,感谢tomexsans和lighta的帮助。对不起,我犯了一个“愚蠢”的错误 - 大概需要2-3个小时来实现 - 索引不跟随$ offset,因为我忘了使用那个变量。我使用一个整数,每次页面加载时我都会重置为1,因此索引将永远重置为1:P