Edición de «Paginadores»
De KumbiaPHP Framework Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces guarda los cambios para así efectuar la reversión.
Revisión actual | Tu texto | ||
Línea 5: | Línea 5: | ||
Para array: | Para array: | ||
− | + | $s : array a paginar | |
− | + | page: numero de página | |
− | + | per_page: cantidad de elementos por página | |
− | |||
− | |||
− | |||
'''Ejemplo:''' | '''Ejemplo:''' | ||
<source lang=php line> | <source lang=php line> | ||
− | $page = paginate($ | + | $page = paginate($a, 'per_page: 5', 'page: 1'); |
</source> | </source> | ||
Para modelo: | Para modelo: | ||
− | + | $s: string con nombre de modelo o objeto ActiveRecord | |
− | + | page: numero de página | |
− | + | per_page: cantidad de elementos por página | |
− | |||
− | |||
− | |||
− | |||
Asimismo recibe todos los parámetros que pueden utilizarse en el método “find” de | Asimismo recibe todos los parámetros que pueden utilizarse en el método “find” de | ||
ActiveRecord. | ActiveRecord. | ||
Línea 30: | Línea 23: | ||
'''Ejemplos:''' | '''Ejemplos:''' | ||
<source lang=php line> | <source lang=php line> | ||
− | $page = paginate('usuario', 'NOT login=”admin”', 'order: login ASC', 'per_page: 5', 'page: 1'); | + | $page = paginate('usuario', 'NOT login=”admin”', 'order: login ASC', 'per_page: |
− | $page = paginate($this | + | 5', 'page: 1'); |
+ | $page = paginate($this> | ||
+ | Usuario, 'NOT login=”admin”', 'order: login ASC', | ||
+ | 'per_page: 5', 'page: 1'); | ||
</source> | </source> | ||
Línea 38: | Línea 34: | ||
Efectúa paginación a través de una consulta sql. Recibe los siguientes parámetros: | Efectúa paginación a través de una consulta sql. Recibe los siguientes parámetros: | ||
− | + | $model: string nombre de modelo o objeto ActiveRecord | |
− | + | $sql: string consulta sql | |
'''Ejemplo:''' | '''Ejemplo:''' | ||
<source lang=php line> | <source lang=php line> | ||
− | $page = paginate_by_sql('usuario', 'SELECT * FROM usuario WHERE nombre LIKE “%emilio%” ', 'per_page: 5', 'page: 1'); | + | $page = paginate_by_sql('usuario', 'SELECT * FROM usuario WHERE nombre LIKE |
+ | “%emilio%” ', 'per_page: 5', 'page: 1'); | ||
</source> | </source> | ||
Ambos tipos de paginadores retornan un objeto “page”, este objeto “page” es creado a | Ambos tipos de paginadores retornan un objeto “page”, este objeto “page” es creado a | ||
partir de stdClass, contiene los siguientes atributos: | partir de stdClass, contiene los siguientes atributos: | ||
+ | next: número de página siguiente, si no hay pagina siguiente vale “false”. | ||
+ | prev: número de página anterior, si no hay pagina anterior vale “false”. | ||
+ | current: número de página actual. | ||
+ | total: número de paginas totales. | ||
+ | items: array de elementos paginados. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Paginando en ActiveRecord== | ==Paginando en ActiveRecord== | ||
Línea 66: | Línea 59: | ||
'''Ejemplo:''' | '''Ejemplo:''' | ||
<source lang=php line> | <source lang=php line> | ||
− | $page = $this | + | $page = $this> |
+ | Usuario> | ||
+ | paginate('per_page: 5', 'page: 1'); | ||
</source> | </source> | ||
− | ==Ejemplo completo de uso del paginador:== | + | |
+ | |||
+ | =='''Ejemplo completo de uso del paginador:'''== | ||
Tenemos una tabla usuario con su correspondiente modelo Usuario, entonces creemos un controlador el cual pagine una lista de usuarios y asimismo permita buscar por nombre, aprovecharemos la persistencia de datos del controlador para hacer una paginación inmune a inyección sql. | Tenemos una tabla usuario con su correspondiente modelo Usuario, entonces creemos un controlador el cual pagine una lista de usuarios y asimismo permita buscar por nombre, aprovecharemos la persistencia de datos del controlador para hacer una paginación inmune a inyección sql. | ||
− | |||
En el controlador: | En el controlador: | ||
<source lang=php line> | <source lang=php line> | ||
class UsuarioController extends ApplicationController { | class UsuarioController extends ApplicationController { | ||
− | + | private $_per_page = 7; | |
− | + | /** | |
− | + | * Formulario de busqueda | |
− | + | **/ | |
− | + | public function buscar() { | |
− | + | $this> | |
− | + | nullify('page', 'conditions'); | |
− | + | } | |
− | + | /** | |
− | + | * Paginador | |
− | + | **/ | |
− | + | public function lista($page='') { | |
− | + | /** | |
− | + | * Cuando se efectua la busqueda por primera vez | |
− | + | **/ | |
− | + | if($this> | |
− | + | has_post('usuario')) { | |
− | + | $usuario = $this> | |
− | + | post('usuario', 'trim', 'addslashes'); | |
− | + | if($usuario['nombre']) { | |
− | + | $this> | |
− | + | conditions = “ nombre LIKE '%{$usuario['nombre']}%' ”; | |
− | + | } | |
− | + | /** | |
− | + | * Paginador con condiciones o sin condiciones | |
− | + | **/ | |
− | + | if(isset($this> | |
− | + | conditions) && $this> | |
− | + | conditions) { | |
− | + | $this> | |
− | + | page = $this> | |
− | + | Usuario> | |
− | + | paginate($this> | |
− | + | conditions, “per_page: | |
− | + | $this>_ | |
− | + | per_page”, 'page: 1'); | |
− | + | } else { | |
− | + | $this> | |
− | + | page = $this> | |
− | + | Usuario> | |
− | + | paginate(“per_page: $this>_ | |
− | + | per_page”, | |
− | + | 'page: 1'); | |
− | + | } | |
− | + | } elseif($page='next' && isset($this> | |
− | + | page) && $this> | |
− | + | page> | |
+ | next) { | ||
+ | /** | ||
+ | * Paginador de pagina siguiente | ||
+ | **/ | ||
+ | if(isset($this> | ||
+ | conditions) && $this> | ||
+ | conditions) { | ||
+ | $this> | ||
+ | page = $this> | ||
+ | Usuario> | ||
+ | paginate($this> | ||
+ | conditions, “per_page: | ||
+ | $this>_ | ||
+ | per_page”, “page: {$this> | ||
+ | page> | ||
+ | next}”); | ||
+ | } else { | ||
+ | $this> | ||
+ | page = $this> | ||
+ | Usuario> | ||
+ | paginate(“per_page: $this>_ | ||
+ | per_page”, | ||
+ | “page: {$this> | ||
+ | page> | ||
+ | next}”); | ||
+ | } | ||
+ | } elseif($page='prev' && isset($this> | ||
+ | page) && $this> | ||
+ | page> | ||
+ | prev) { | ||
+ | /** | ||
+ | * Paginador de pagina anterior | ||
+ | **/ | ||
+ | if(isset($this> | ||
+ | conditions) && $this> | ||
+ | conditions) { | ||
+ | $this> | ||
+ | page = $this> | ||
+ | Usuario> | ||
+ | paginate($this> | ||
+ | conditions, “per_page: | ||
+ | $this>_ | ||
+ | per_page”, “page: {$this> | ||
+ | page> | ||
+ | prev}”); | ||
+ | } else { | ||
+ | $this> | ||
+ | page = $this> | ||
+ | Usuario> | ||
+ | paginate(“per_page: $this>_ | ||
+ | per_page”, | ||
+ | “page: {$this> | ||
+ | page> | ||
+ | prev}”); | ||
+ | } | ||
+ | } | ||
+ | } | ||
} | } | ||
</source> | </source> | ||
Línea 143: | Línea 196: | ||
<th>nombre</th> | <th>nombre</th> | ||
</tr> | </tr> | ||
− | <?php foreach($page | + | <?php foreach($page> |
+ | items as $p): ?> | ||
<tr> | <tr> | ||
− | <td><?php echo $p | + | <td><?php echo $p> |
− | <td><?php echo h($p | + | id ?></td> |
+ | <td><?php echo h($p> | ||
+ | nombre) ?></td> | ||
</tr> | </tr> | ||
<?php endforeach; ?> | <?php endforeach; ?> | ||
</table> | </table> | ||
<br> | <br> | ||
− | <?php if($page | + | <?php if($page> |
− | <?php if($page | + | prev) echo link_to('usuario/lista/prev', 'Anterior') ?> |
+ | <?php if($page> | ||
+ | next) echo ' | ' . link_to('usuario/lista/next', 'Siguiente') ?> | ||
</source> | </source> |