2010-11-04 22 views
6

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

14
 // 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ó :)

+1

cũng ORM có hữu ích 'count_last_query() 'phương pháp đếm hàng kết quả. – biakaveron

+1

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

+0

tuyệt vời! đó là hữu ích, cảm ơn bạn! – dana

3

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