Simple datagrid con opciones
De KumbiaPHP Framework Wiki
Revisión del 05:03 14 feb 2012 de Jamp (discusión | contribuciones)
helpers para crear de forma simple un datagrid (con algunas opciones adicionales), con base en el Simple datagrid del FiDeLio
Código del helpers
<?php
class Registro {
/**
* Helpers para crear un datagrid sencillo a partir de un ActiveRecord
* Ejemplo:
* Sin Opciones
* <code>
* $campos = array(
* 'Codigo' => 'id',
* 'Nombre' => 'nombre',
* 'Telefono' => 'telefono',
* 'Direccion' => 'direccion');
* </code>
* Con Opciones
* <code>
* $campos = array(
* 'Codigo' => 'id',
* 'Nombre' => 'nombre',
* 'Telefono' => 'telefono',
* 'Direccion' => 'direccion',
* 'Opciones' => '$');
*
* $opciones = array(
* 'Actulizar' => 'controlador/actualizar/',
* 'Modificar' => 'controlador/modificar/',
* 'Detalles' => 'controlador/detalles/',
* 'Borrar' => 'controlador/borrar/');
* </code>
* Adicionales
* <code>
* $campos = array(
* 'sexo' => 'Femenino|Masculino',
* 'estado' => 'Activo|Inactivo',
* 't_vivienda' => 'Propia|Alquilada|Heredada|Choza');
* </code>
*
* @param Object $modelo
* @param Array $campos
* @param Array/Null $opciones
* @param Array/Null $adicionales
* @return String
*
*/
public static function datagrid($modelo, $campos, $opciones = NULL, $adicionales = NULL) {
// Agregar el ccs para el datagrid
Tag::css('datagrid');
// Cabecera
$grid = "<div id=\"datagrid\">";
$grid .= "<table border=\"0px\" cellpadding=\"0px\" cellspacing=\"0px\" align=\"center\">";
$grid .= "<thead><tr>";
// Titulo de la tabla
foreach ($campos as $titulo => $valor):
// Campo pequeño si es Id o Código
if ( $titulo == "Código" || $titulo == "Id" ):
$grid .= "<th width=\"10px\">";
else:
$grid .= "<th>";
endif;
$grid .= $titulo;
$grid .= "</th>";
endforeach;
$grid .= "</tr></thead><tbody>";
$i = 1;
// Datos de la tabla
if (count($modelo)) :
foreach ($modelo as $model):
// Columnas pares o impares
if ( ($i%2) == 0 ):
$colm = 'par';
else:
$colm = 'impar';
endif;
$grid .= "<tr class=\"$colm\">";
$i++;
// Data
foreach ($campos as $campo):
// Si es activado la fila Opciones
if ( $campo == '$' ):
$grid .= "<td align=\"center\" width=\"150\">";
$cant = count($opciones);
$j = 1;
foreach ($opciones as $opcion => $link):
$link = $link . $model->id;
$grid .= Html::link($link, $opcion);
if ($cant != $j):
$grid .= " | ";
endif;
$j++;
endforeach;
$grid .= "</td>";
else:
// Centrar si el campo es el id
if ( $campo == "id" ):
$campoc = "align=\"center\"";
else:
$campoc = "align=\"left\"";
endif;
if (count($adicionales)) :
if (array_key_exists ($campo, $adicionales)):
$addons = explode("|", $adicionales[$campo]);
$grid .= "<td $campoc>" . $addons[$model->$campo] . "</td>";
else:
$grid .= "<td $campoc>" . $model->$campo . "</td>";
endif;
else:
$grid .= "<td $campoc>" . $model->$campo . "</td>";
endif;
endif;
endforeach;
$grid .= "</tr>";
endforeach;
else:
$grid .= "<tr><td colspan='" . count($campos) . "' align='center'>No hay registros </td></tr>";
endif;
$grid .= "</tbody></table></div>";
return $grid;
}
}
?>
Modo de Uso
En el controlador
Aquí definimos algunos parámetros para dar una respuesta bastante completa del datagrid
// Datos para datagrid
$this->modelo = Load::model('datos_personales')->find();
$controlador = $this->controller_name;
$this->campos = array(
'Credencial' => 'credencial',
'Primer Nombre' => 'primer_nombre',
'Primer Apellido' => 'primer_apellido',
'Sexo' => 'sexo',
'Opciones' => '$'
);
// Definimos las acciones que tendremos en la columna Opciones
$this->opciones = array(
'Modificar' => "$controlador/crear/",
'Borrar' => "$controlador/borrar/"
);
// El asignamos unos String equivalente para el campo sexo esto
// para que no muestre un resultado más amigable que 0 ó 1
// podría servir igual para estado en que se obtendría Activo ó Inactivo
$this->adicionales = array(
'sexo' => 'Femenino|Masculino'
);
En la vista
<?php echo Registro::datagrid($modelo, $campos, $opciones, $adicionales) ?>
Realizado por Jaro Marval (Jamp)