2012-07-13 32 views
5

Tôi đã đọc tất cả các câu hỏi trên Stackoverflow và không thấy câu trả lời dứt khoát nào cho câu hỏi. Tôi hiện đang sử dụng thư viện pagination codeigniter để tạo liên kết pagination của tôi sử dụng giới hạn và một bù đắp:Làm cách nào để sử dụng số trang trong phân trang Codeigniter thay vì bù trừ?

$config['base_url'] = base_url() . 'explore/featured/index/'; 
    $config['total_rows'] = $this->Projects_model->get_featured_count();//Count featured projects 
    $config['per_page'] = 12; 
    $config['uri_segment'] = 4; 
    $config['display_pages'] = FALSE; 
    $config['next_link'] = 'Older →'; 
    $config['prev_link'] = '← Newer'; 
    $this->pagination->initialize($config); 
    $limit = $config['per_page']; 
    $offset = $this->uri->segment(4); 

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

    $data['projects'] = $this->Projects_model->get_featured($limit, $offset); //get featured projects from database 

Đoạn mã trên giới hạn giá trị sản lượng truy vấn của tôi và sử dụng một bù đắp được chứa trong phân khúc URI thứ 4 của tôi.

Làm cách nào để thay đổi mã dưới đây thành số trang ??? Xuất hiện là không thể vì tôi sẽ không còn có thể sử dụng bù đắp trong url của tôi nữa.

Trả lời

16

Tại một số điểm, CI cập nhật của họ pagination library đến (cuối cùng) phù hợp cho việc này:

$config['use_page_numbers'] = TRUE;

Theo mặc định, phân khúc URI sẽ sử dụng chỉ số khởi đầu cho các mục mà bạn đang paginating. Nếu bạn thích để hiển thị số trang thực, hãy đặt số này thành TRUE.

Nếu bạn đang sử dụng phiên bản không có tính năng này và không thể cập nhật toàn bộ cài đặt CI, bạn có thể chỉ cần thả vào thư viện phân trang mới nhất.

Để tính toán bù trừ DB của bạn, hãy sử dụng $limit * $page_number trong đó "page_number" là giá trị trong URL của bạn (phân đoạn thứ 4 trong trường hợp của bạn).

+0

"Tại một số điểm" === Version 2.10 phát hành 14 tháng 11 năm 2011. Tôi bị bỏ rơi lib pagination của họ cách đây rất lâu tôi đã không Không nhận ra họ đã thay đổi. Có thể bạn đang sử dụng nó. –

+1

Và những gì bạn đang sử dụng? Chỉ tò mò thôi. –

5

$limit * $page_number được đề cập ở trên không trả lại giá trị thực là điểm bắt đầu và tạo ra sự cố khi số trang là 1 vì chênh lệch phải bằng 0. Điều này làm việc cho tôi:

$offset = ($page_number == 1) ? 0 : ($page_number * $config['per_page']) - $config['per_page']; 
+1

Chỉ muốn đặt điều này ở đây nếu có ai muốn sử dụng. Nếu bạn nhận được số trang từ phân đoạn, chỉ cần kiểm tra bổ sung cho điều kiện đầu tiên: ($ page_number == 1 || $ page_number == NULL). Điều đó làm việc cho chương trình của tôi, và cảm ơn bạn đã chia sẻ câu trả lời, thực sự hữu ích :) –

-1
$page_num = $this->uri->segment(1); 
$offset = ($page_num == NULL) ? 0 : 
      ($page_num * $config['per_page']) - $config['per_page']; 
1

Chỉ cần sử dụng:

$offset = ($this->uri->segment(4)) ? $this->uri->segment(4) : 1; 
$data['projects'] = $this->Projects_model->get_featured($limit, $limit*($offset-1)); 
+0

Xin vui lòng thêm một số lời giải thích là tốt. – BlackBeard

+1

Đúng, tiếng anh của tôi rất tệ nên tôi hy vọng bạn có thể hiểu được. Ví dụ: Giới hạn của bạn là 4 bài đăng. Trong trang 1 (offset = trống để nó sẽ nhận được giá trị "1" theo mặc định), mô hình sẽ chọn từ 0 (giới hạn * (offset-1) = 0) đến giới hạn của bạn (4). Trang 2 (offset = 2) là như nhau, nó sẽ chọn từ 4 (giới hạn * (offset-1) = 4) đến giới hạn của bạn (4). Vì vậy, mỗi trang bạn có 4 bài viết như bạn muốn. –

Các vấn đề liên quan