Codeigniter 分页从不同页面和不同员工的不同活动链接开始,而代码相同

Posted

技术标签:

【中文标题】Codeigniter 分页从不同页面和不同员工的不同活动链接开始,而代码相同【英文标题】:Codeigniter Pagination start from different page and different active link for different employee while code is same 【发布时间】:2018-06-04 01:47:18 【问题描述】:

我有员工的出勤详细信息,我想用分页显示这些详细信息,但问题是分页从不同的页码开始。对于某些用户,它从第一页开始,而对于其他用户,它从第 2、第 5 页开始。虽然分页应该从每个用户的第一页开始。 我不知道问题出在哪里。我比较新鲜。请指导我。

控制器:

public function attendance($biometric_reg_number) 

    $this->load->helper('form');
    $this->load->model('Attendance_model', 'attendances');
    $this->load->library('pagination');
    $config = [
        'base_url'        => base_url("admin/attendance/attendance/$biometric_reg_number"),
        'per_page'        => 30,
        'total_rows'      => $this->attendances->filter_attenceby_admin_num_rows($biometric_reg_number),
        'full_tag_open'   => "<ul class='pagination'>",
        'full_tag_close'  => "</ul>",
        'first_link'      => "First",
        'first_tag_open'  => '<li>',
        'first_tag_close' => '</li>',
        'last_link'       => 'Last',
        'last_tag_open'   => '<li>',
        'last_tag_close'  => '</li>',
        'next_tag_open'   => '<li>',
        'next_tag_close'  => '</li>',
        'prev_tag_open'   => '<li>',
        'prev_tag_close'  => '</li>',
        'num_tag_open'    => '<li>',
        'num_tag_close'   => '</li>',
        'cur_tag_open'    => "<li class='active'><a>",
        'cur_tag_close'   => '</a></li>',
    ];
    $this->pagination->initialize($config);
    $this->load->model('Attendance_model', 'attendances');
    $attendances = $this->attendances->find_attendance_detail($biometric_reg_number, $config['per_page'], $this->uri->segment(5));
    $this->load->view('admin/attendance', ['attendances' => $attendances]);

型号:

public function find_attendance_detail($biometric_reg_number, $limit, $offset) 
    $q = $this->db->select('*')
        ->from('basic_detail')
        ->join('employeedata', "employeedata.biometric_reg_number = basic_detail.biometric_reg_number")
        ->where('basic_detail.biometric_reg_number', $biometric_reg_number)
        ->limit($limit, $offset)
        ->order_by('employee_date', 'DESC')
        ->get();

    return $q->result();



public function filter_attenceby_admin_num_rows($biometric_reg_number) 
    $q = $this->db->select('*')
        ->from('basic_detail')
        ->join('employeedata', "employeedata.biometric_reg_number = basic_detail.biometric_reg_number")
        ->where('basic_detail.biometric_reg_number', $biometric_reg_number)
        //->order_by('employee_date','DESC')
        ->get();

    return $q->num_rows();

image

image 2 image 3

【问题讨论】:

您的页码似乎是 $biometric_reg_number。对于您显示的那些屏幕截图,您没有显示正在使用的 url(只是控制器 / 以及它的所有其余部分)。 这是我显示详细信息 (/admin/attendance/attendance/48) 时的第一个 url,其中 48 是生物识别号码,当我分页时,url 是 (/admin/attendance/attendance/48/60 )。我每页显示 30 个。 48 开头的页码是多少? 从第二页开始。我的意思是活动链接在第二个,而它应该从第一页开始。 【参考方案1】:

您没有在 $config 中设置 uri_segment。

$config['uri_segment'] = 5

数字应该是页码,而不是实际的记录偏移量。 如果 uri(5) 未设置,则应将页面设置为变量。

$page = ($this->uri->segment(5)) ? ($this->uri->segment(5) - 1) : 0;

然后用 $page 调用 find_attendance_detail。

$attendances = $this->attendances->find_attendance_detail($biometric_reg_number, $config['per_page'], ($page * 30));

另外你应该使用 sql COUNT 来获取总记录数,你不需要加入。

SQL 有点像这样。

select count(*) from basic_detail 
where basic_detail.biometric_reg_number = $biometric_reg_number;

(我不使用 CI 查询生成器,所以我不知道确切的命令。)

【讨论】:

以上是关于Codeigniter 分页从不同页面和不同员工的不同活动链接开始,而代码相同的主要内容,如果未能解决你的问题,请参考以下文章

当页面为 1 时,Material-UI Datagrid 分页从第二页开始

Laravel AJAX 分页从旧数据中提取行

在 SQL Server 2005 中使用 ROW_NUMBER() OVER () 对不同列进行排序的分页查询

在 SQL Server 2005 中使用 ROW_NUMBER() OVER () 对不同列进行排序的分页查询

使用分页从两个关系(一个是通过访问器)获取记录

将分页从“react-js-pagination”转换为“react-bootstrap”分页