Tôi thực sự bị mất về cách phân trang hoạt động trong kohana 3. Có một ví dụ điển hình về phân trang ở Kohana 3 ở đâu không?Kohana 3 pagination
Trả lời
// Get the total count of articles
$count = $this
->_profil
->articles
->count_all();
// Create the pagination object
$pagi = Pagination::factory(array(
'items_per_page' => 4,
'total_items' => $count,
));
// Find actual articles
$articles = $this->_profil
->articles
->join_categories()
->order_by('id','DESC')
->limit($pagi->items_per_page)
->offset($pagi->offset)
->find_all();
và sau đó trong View, bạn chỉ cần làm
echo $pagi; // ofc, after passing the Pagination object to view
gì xảy ra ở đây là Pagination lớp sử dụng nó __toString() phương pháp kỳ diệu Xem lý lịch thành để render html cần thiết để hiển thị pagination. Tất cả các tham số phân trang có thể được sửa đổi khi tạo đối tượng (truyền các khóa thích hợp cho mảng được chuyển đến phương thức factory() trong trường hợp của chúng ta).
Khóa mặc định cho phân trang là "trang" (chuỗi truy vấn), trong khi bạn cũng có thể sửa đổi điều đó. Pagination cũng có một cấu hình mặc định, bạn có thể ghi đè lên bằng cách sao chép nó vào thư mục application/config.
Thích sử dụng nó :)
Bạn có thể tìm thấy một số tài liệu phong nha trong số unofficial Kohana wiki.
Trong Kohana 3.1, không bao gồm phân trang. Tải xuống mô-đun và đặt nó vào thư mục mô-đun. Bật mô-đun trong ứng dụng /bootstrap.php của bạn. Đây là trang điều khiển của tôi. Đối với cấu hình thêm sao chép các tập tin cấu hình được cung cấp từ modules/pagination/config/pagination.php để application/config/pagination.php
$per_page =2;
$page_num = $this->request->param('page', 1);
$offset = ($page_num - 1) * $per_page;
$view =View::factory('image/imagelist')->bind('page_links',$page_links)->bind('results', $results)->bind('pagination', $pagination);
// Get the total count of records in the database
$userid = Auth::instance()->get_user()->pk();
$count=ORM::factory('user_image')->where('app_userid','=',$userid)->count_all();
// Create an instance of Pagination class and set values
$pagination = Pagination::factory(array(
'total_items' => $count,
'current_page' => array('source' => 'image/imagelist', 'key' => 'page'),
'items_per_page' => $per_page,
'offset' => $offset,
'view' => 'pagination/basic'
));
// Load specific results for current page
$results = DB::select()->from('user_images')
->where('app_userid','=',$userid)
->order_by('image_id','ASC')
->limit($pagination->items_per_page)
->offset($pagination->offset)->execute();
$page_links = $pagination;
$this->template->content=$view->render();
Bạn có thể nhận được lỗi ErrorException [Chú ý]: bất động sản Không xác định: Request::$uri
. trong lớp pagination (module). Để khắc phục sửa chữa nó
Sử dụng Request::current()->uri()
thay vì Request::current()->uri
cũng ORM có hữu ích 'count_last_query() 'phương pháp đếm hàng kết quả. – biakaveron
mặc dù tôi sẽ không dựa vào phương pháp đó quá nhiều khi có truy vấn phức tạp :) Bằng cách này, chúng tôi cũng có thể sử dụng lại truy vấn đếm, bằng cách thêm đặt lại (FALSE) trước khi việc đếm xảy ra. – Kemo
tuyệt vời! đó là hữu ích, cảm ơn bạn! – dana