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
'''$s''' : array a paginar.
+
page: numero de página
 
+
per_page: cantidad de elementos por página
'''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($s, 'per_page: 5', 'page: 1');
+
$page = paginate($a, 'per_page: 5', 'page: 1');
 
</source>
 
</source>
  
 
Para modelo:
 
Para modelo:
 
+
$s: string con nombre de modelo o objeto ActiveRecord
'''$s''': string con nombre de modelo u objeto ActiveRecord.
+
page: numero de página
 
+
per_page: cantidad de elementos por página
'''page''': número 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->Usuario, 'NOT login=”admin”', 'order: login ASC', 'per_page: 5', 'page: 1');
+
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.
+
$model: string nombre de modelo o objeto ActiveRecord
  
'''$sql''': string consulta sql.
+
$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.
  
'''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->Usuario->paginate('per_page: 5', 'page: 1');
+
$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;
+
private $_per_page = 7;
  /**
+
/**
  * Formulario de busqueda
+
* Formulario de busqueda
  **/
+
**/
  public function buscar() {
+
public function buscar() {
    $this->nullify('page', 'conditions');
+
$this>
  }
+
nullify('page', 'conditions');
  /**
+
}
  * Paginador
+
/**
  **/
+
* Paginador
  public function lista($page='') {
+
**/
    /**
+
public function lista($page='') {
    * Cuando se efectua la busqueda por primera vez
+
/**
    **/
+
* Cuando se efectua la busqueda por primera vez
    if($this->has_post('usuario')) {
+
**/
      $usuario = $this->post('usuario', 'trim', 'addslashes');
+
if($this>
      if($usuario['nombre']) {
+
has_post('usuario')) {
        $this->conditions = “ nombre LIKE '%{$usuario['nombre']}%' ”;
+
$usuario = $this>
      }
+
post('usuario', 'trim', 'addslashes');
      /**
+
if($usuario['nombre']) {
      * Paginador con condiciones o sin condiciones
+
$this>
      **/
+
conditions = “ nombre LIKE '%{$usuario['nombre']}%' ”;
      if(isset($this->conditions) && $this->conditions) {
+
}
        $this->page = $this->Usuario->paginate($this->conditions, “per_page: $this>_per_page”, 'page: 1');
+
/**
      } else {
+
* Paginador con condiciones o sin condiciones
        $this->page = $this->Usuario->paginate(“per_page: $this>_per_page”, 'page: 1');
+
**/
      }
+
if(isset($this>
    } elseif($page='next' && isset($this->page) && $this->page->next) {
+
conditions) && $this>
      /**
+
conditions) {
      * Paginador de pagina siguiente
+
$this>
      **/
+
page = $this>
      if(isset($this->conditions) && $this->conditions) {
+
Usuario>
        $this->page = $this->Usuario->paginate($this->conditions, “per_page: $this>_per_page”, “page: {$this->page->next}”);
+
paginate($this>
      } else {
+
conditions, “per_page:
        $this->page = $this->Usuario->paginate(“per_page: $this->_per_page”, “page: {$this->page->next}”);
+
$this>_
      }
+
per_page”, 'page: 1');
    } elseif($page='prev' && isset($this->page) && $this->page->prev) {
+
} else {
      /**
+
$this>
      * Paginador de pagina anterior
+
page = $this>
      **/
+
Usuario>
      if(isset($this->conditions) && $this->conditions) {
+
paginate(“per_page: $this>_
        $this->page = $this->Usuario->paginate($this->conditions, “per_page: $this->_per_page”, “page: {$this->page->prev}”);
+
per_page”,
    } else {
+
'page: 1');
      $this->page = $this->Usuario->paginate(“per_page: $this->_per_page”, “page: {$this->page->prev}”);
+
}
    }
+
} 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->items as $p): ?>
+
<?php foreach($page>
 +
items as $p): ?>
 
<tr>
 
<tr>
<td><?php echo $p->id ?></td>
+
<td><?php echo $p>
<td><?php echo h($p->nombre) ?></td>
+
id ?></td>
 +
<td><?php echo h($p>
 +
nombre) ?></td>
 
</tr>
 
</tr>
 
<?php endforeach; ?>
 
<?php endforeach; ?>
 
</table>
 
</table>
 
<br>
 
<br>
<?php if($page->prev) echo link_to('usuario/lista/prev', 'Anterior') ?>
+
<?php if($page>
<?php if($page->next) echo ' | ' . link_to('usuario/lista/next', 'Siguiente') ?>
+
prev) echo link_to('usuario/lista/prev', 'Anterior') ?>
 +
<?php if($page>
 +
next) echo ' | ' . link_to('usuario/lista/next', 'Siguiente') ?>
 
</source>
 
</source>

Ten en cuenta que todas las contribuciones a KumbiaPHP Framework Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Proyecto:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)