Codeigniter Pagination начинается с другой страницы и другой активной ссылки для разных сотрудников, в то время как код один и тот же

0

У меня есть данные о посещаемости сотрудников, я хочу показать эти данные с разбивкой по страницам, но проблема в том, что разбиение на страницы начинается с разных номеров страниц. для некоторых пользователей он начинается с первой страницы, тогда как для других пользователей он запускается на 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();
}

образ

изображение 2 изображение 3

Теги:
codeigniter
pagination

1 ответ

0

Вы не устанавливаете uri_segment в $ config.

$config['uri_segment'] = 5

Номер должен быть номером страницы, а не фактическим смещением записи. Вы должны установить страницу в переменной в случае, если uri (5) не установлен.

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

И вызовите find_attendance_detail с помощью $ page.

$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, поэтому не знаю точной команды.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню