2010-11-04 19 views
6

Estoy realmente perdido en cómo funciona la paginación en kohana 3. ¿Hay algún buen ejemplo de paginación en Kohana 3 en cualquier lugar?Kohana 3 pagination

Respuesta

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

y luego en la vista, que acaba de hacer

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

Lo que sucede aquí es la clase de paginación utilizando su método mágico de __toString Ver() para representar HTML necesario para mostrar la paginación. Todos los parámetros de paginación se pueden modificar al crear el objeto (pasando las teclas apropiadas a la matriz pasada al método factory() en nuestro caso).

La clave predeterminada para la paginación es "página" (cadena de consulta), mientras que usted puede modificar eso también. Pagination también tiene una configuración predeterminada, que puede anular copiándola en la carpeta application/config.

disfrutar de su uso :)

+1

también ORM tiene 'método para contar filas de resultado útil' count_last_query(). – biakaveron

+1

aunque no confiaría demasiado en ese método cuando tengo una consulta complicada :) De esta manera podemos reutilizar la consulta de recuento también, agregando reinicio (FALSO) antes de que se realice el recuento. – Kemo

+0

genial! eso fue útil, ¡gracias! – dana

3

En Kohana 3.1 de paginación no está incluido. Descargue el módulo y colóquelo en la carpeta modules. Habilite el módulo en su aplicación /bootstrap.php. Esta es mi página de controlador. Por otra configuración copiar el archivo de configuración proporcionada por módulos/paginación/config/pagination.php a 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(); 

Usted puede obtener el error ErrorException [Aviso]: Undefined property: Request::$uri . en la clase de paginación (módulo). Para fijar fijarlo

Uso Request::current()->uri() en lugar de Request::current()->uri