Elementos de Formulario
Un elemento de formulario (abreviado ef) es la representación de un campo de edición. Los distintos tipos de ef en general encapsulan los input clásicos de HTML como un combo, un checkbox o un edit.
Definición
La definición de un ef siempre está manejada por el componente contenedor (generalmente un [referencia/Objetos/ei_formulario formulario]). Los atributos básicos que se incluyen son:
Identificador: Es la clave con la que se conoce al ef en su componente contenedor.
Datos Manejados: Muchas veces igual al identificador, el dato es como se conoce al ef en las capas inferiores. Por ejemplo cuando se quiere usar el API del ef se usa su identificador pero cuando el formulario informa sus datos lo hace utilizando este atributo como clave del arreglo asociativo. Cuando se sabe de antemano la cantidad de datos se puede especificar los identificadores de estos valores separados por coma. En caso de ser uno único se recomiendo usar el mismo dato que el identificador.
Tipos de Elementos
<div class='tablas-screenshots'>
Los efs actualmente se pueden clasificar según la actividad que el usuario realiza:
El usuario selecciona
- Selecciona un único elemento de un conjunto disponible:
Tipo Ef | Descripcion | |
---|---|---|
checkbox | Selección entre dos estados. | |
radio | Pensado para conjuntos de datos pequeños. Las opciones disponibles son de fácil lectura (no requiere interacción del usuario) | |
combo | Seleccion entre un conjunto mediano de datos cuyos elementos son fáciles de encontrar por nombre. | |
combo_editable | Selección de un elemento entre un gran conjunto de datos, con búsqueda progresiva tipo AJAX (suggest) | |
popup | Pensado para conjuntos grandes con métodos de búsqueda complejos. |
- Selecciona varios elementos del conjunto:
Tipo Ef | Descripcion | |
---|---|---|
multi_select | Usando el componente clásico HTML, difícil de entender para usuarios novatos. | |
multi_doble | Cruzando los elementos de un lado al otro. | |
multi_checkbox | Tildando checkboxs. |
El usuario edita
Tipo Ef | Descripcion | |
---|---|---|
editable | Una línea de texto. | |
numero | Un número. | |
moneda | Unnúmero representando un importe en una moneda específica. | |
porcentaje | Un número representando un porcentaje. | |
fecha | Una fecha, con un calendario de ayuda. | |
textarea | Múltiples líneas libremente, sin formato. | |
cuit | Un número de CUIT/CUIL. | |
html | Edición de texto con formato. |
El usuario observa un contenido
Tipo Ef | Descripcion | |
---|---|---|
fijo | Muestra su valor como HTML. |
El usuario sube un archivo
Tipo Ef | Descripcion | |
---|---|---|
upload | Selecciona un archivo de su sistema para que esté disponible en el servidor. |
Es invisible al usuario
Su valor sólo está disponible para el proceso interno
- oculto: Guarda su valor como variable de sesión.
- oculto_usuario: Su valor es el id del usuario actualmente logueado.
- oculto_proyecto: Su valor es el id del proyecto actual.
</div>
Carga de Opciones
La forma de carga de datos a un ef es cargar el formulario que lo contiene, esta carga varia su estado.
Algunos efs necesitan aparte una carga de opciones, esta carga varia sus
posibles estados. Por ejemplo un combo típico necesita por un lado
saber su estado actual, es decir cuál de sus opciones está actualmente
seleccionada, este estado se lo suministra la carga desde el CI
contenedor. Suponiendo que el ef se llama persona
y el formulario
alumno
:
function conf__alumno($form)
{
$form->set_datos(array('persona' => 142));
}
Este método en el CI contenedor cargará el estado del ef con la persona 142. Pero el combo también necesita conocer sus posibles valores y sus descripciones, entonces por ejemplo podemos cargar estas opciones con un método del mismo CI indicándolo en la definición del ef. El método tendría este formato:
function cargar_alumno()
{
return array(
array('id' => 100, 'nombre' => 'Juan Perez'),
array('id' => 142, 'nombre' => 'Cristian Fernandez'),
.....
);
}
Dependiendo del tipo de ef existen distintos tipos de cargas las posibles son:
- Método PHP: Las opciones se cargan en base a la llamada a un método de una clase PHP. Este método puede ser del mismo CI que contiene al formulario o puede ser estático. La desventaja del método estático es que la carga no puede depender de alguna condición actual de la operación.
- Consulta SQL: Se incluye una consulta SQL directamente en la edición del ef, agiliza la definición pero tener SQLs disperasas por el editor puede ser un problema de organización del proyecto.
- Lista de Opciones: Las opciones se ingresan en la definición.
En el ejemplo actual sería ingresar
100/Juan Perez,142/Cristian Fernandez
Generalmente el ef espera que se retorne un formato RecordSet, por eso en la definición se pregunta cuales son sus campos clave y su campo descripción. En el ejemplo el campo clave es id y nombre es su descripción.
Cascadas
Cuando el valor de un ef depende de los valores de otros efs del mismo formulario, estos se encuentran en Cascada. En una cascada existen efs esclavos (cuyo valor depende de otros efs) y sus maestros (aquellos de los cuales dependen los esclavos), generalmente lo que condiciona el maestro en el esclavo es el conjunto de opciones que se muestran al usuario. Este tipo de dependencias son típicas en páginas web donde por ejemplo se ingresa el país en un combo y restringe automáticamente las localidades disponibles, en este ejemplo el país es maestro y la localidad es esclavo.
La forma en la que se incide en los valores posibles del esclavo es en
su carga. Si la carga es a través de un método PHP los valores de los
maestros llegarán por parámetro en el orden que son declarados, en el
caso de una consulta SQL se reemplazarán las ocurrencia de
%id_ef_maestro%
(donde id_ef_maestro
es el identificador del ef
maestro al actual). Por ejemplo si definimos que el ef localidades es
esclavo de pais y provincia, la carga PHP recibiría estos dos
parámetros:
<?php
function get_localidades($pais, $provincia)
{
...
}
?>
No hay límite en la cantidad de maestros/esclavos en un formulario, solo existe la restricción de que no pueden existir ciclos de dependencias (ej. país es maestro de localidad que a su vez es maestro de país).
Tipo Ef | Puede ser esclavo | Puede ser Maestro | Notas |
---|---|---|---|
checkbox | NO | SI | Cuandoesta chequeado envia el valor asociado, sino null |
oculto | NO | SI | |
combo | SI | SI | |
combo_ediable | SI | SI | |
radio | SI | SI | |
popup | SI | SI | La carga del popup espera retornar un solo valor, su descripción. Para que pueda funcionar totalmente como esclavo debería poder recibir dos valores (su estado y su descripcion), actualmente solo recibe uno por lo que sólo funciona en casos donde el estado y su descripción coinciden (generalmente cuando el popup es editable) |
editable (todos) | SI | NO | |
fijo | SI | NO | |
multi_lista | SI | NO | |
multi_check | SI | NO | |
multi_doble | SI | NO |
El resto de los efs no participan del esquema de cascadas.
Máscaras
Algunos efs editables permiten incluir máscaras personalizadas. La máscara formatea el texto mientras el usuario tipea, solo sirve como algo estetico y no se debe confiar en su 'validación' porque solo se hace en javascript. Un ejemplo de máscara sería ###.###,00. Para ver las máscaras soportadas ver el caso de test asociado