Datagrid Simple Con Paginado

De KumbiaPHP Framework Wiki

Partials para crear de forma simple un datagrid con paginado

En el controlador

Para efecto del ejemplo tenemos el siguiente controller, pero puede ser cualquiera

 <?php
class ClienteController extends ApplicationController {
 
	public function page($page=1){
        // Paso el resultado de la consulta que sera mostrada en el datagrid
        $this->page = Load::model('cliente')->paginate('per_page: 20', "page: $page");
       
       /* paso un array con los campos que quiero mostrar en la datagrid
        *  El key de cada campo del ser el nombre a mostrarse en el tr de la tabla
        *  El value el campo de la tabla
        */ 
	$this->campos = array('Codigo' => 'id',
			      'Nombre' => 'nombre',
			      'Telefono' => 'telefono',
			      'Direccion' => 'direccion'));

        // Nombre del Partial de paginado que utiliza KumbiaPHP
        $this->paginator = 'extended';
        /// Url que utilizara el Paginado de kumbia, por defecto utiliza la accion page 
        $this->url  = null ;

	}
 
}
//  Se maneja todo desde la vista

Mas Informacion referida a los Partial de Paginación disponibles en KumbiaPHP

En la vista

/app/view/cliente/page.phtml

      <? View::partial('datagrid/paginado', false,array('Model'=>$page, 'Campos'=>$campos, 'Paginator'=>$paginator, 'Url'=>$url )) ?>

Partials

/app/view/partials/datagrid/paginado.phtml

<?php
/**
 * Renderiza una tabla en base a un modelo.
 *
 * @author Andres Hal
 * 
 * @param array $Modelo modelo con los resultados a mostrar
 * @param array $Campos array con los que se quieren mostrar de la tabla
 * @return partial
 */
?>
 
	<div id="datagrid">
		<table  border="1px" class="paginado">"
		<thead><tr>
			<?php foreach( $Campos  as $titulo => $valor): ?>
				<th> <?php echo $titulo ?></th>
			<?php endforeach; ?>
		</tr></thead>
                <tbody>
		       <? foreach( $Model->items as $model):
				echo tr_color_class( 'tr_primary', 'tr_secondary' );
					foreach($Campos as  $campos): ?>
					    <td><?php echo $model->$campos ?></td>
				       <?php endforeach; ?>
				</tr>
			<?php endforeach; ?>
		</tbody></table>
        	<?php	View::partial('paginators/'. $Paginator, false, array('page' => $Model ,'url' => $Url)); ?>
	</div>