2010-11-04 7 views
6

Ich bin wirklich verloren, wie Paginierung in Kohana 3 funktioniert. Gibt es in Kohana 3 irgendwo ein gutes Beispiel für Paginierung?Kohana 3 Paginierung

Antwort

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(); 

und dann in der Ansicht, die Sie gerade tun

echo $pagi; // ofc, after passing the Pagination object to view 

Was hier passiert, Paginierung Klasse ist unter Verwendung ihrer Ansicht des __toString() magische Methode zu machen html benötigt Paginierung anzuzeigen. Alle Paginierungsparameter können beim Erstellen des Objekts geändert werden (in unserem Fall werden entsprechende Schlüssel an das Array übergeben, das an die factory() -Methode übergeben wird).

Standardschlüssel für die Seitennummerierung ist "page" (Abfragezeichenfolge), während Sie dies auch ändern können. Die Paginierung hat auch eine Standardkonfiguration, die Sie überschreiben können, indem Sie sie in den Ordner application/config kopieren.

Genießen Sie es mit :)

+1

auch ORM hat nützliche 'count_last_query()' Verfahren zu beheben. – biakaveron

+1

obwohl ich nicht auf diese Methode zu viel bei einer komplizierten Abfrage verlassen würde :) Auf diese Weise können wir die Count-Abfrage auch wieder verwenden, indem Sie zurücksetzen (FALSCH), bevor die Zählung auftritt. – Kemo

+0

cool! das war nützlich, danke! – dana

3

In Kohana 3.1 Paginierung nicht enthalten ist. Laden Sie das Modul herunter und legen Sie es in den Ordner Module. Aktivieren Sie das Modul in Ihrer Anwendung/bootstrap.php. Dies ist meine Controller-Seite. Für die weitere Konfiguration der bereitgestellten Konfigurationsdatei von Module kopieren/Paginierung/config/pagination.php zu 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(); 

können Sie erhalten Fehler Error [Nachricht]: Nicht definierte Eigenschaft: Request::$uri . in der Paginierungsklasse (Modul). Um regeln es für Zählergebnis Reihen

Verwenden Request::current()->uri() anstelle von Request::current()->uri