Simple datagrid con opciones
De KumbiaPHP Framework Wiki
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) ?>
Y ya listo sencillo tenemos un datagrid con algunas opciones adicionales
Realizado por Jaro Marval (Jamp)