generar()
generar(array $campos, boolean $incluir_navegador = true, \Conexion $conexion = null)
Emite código HTML/Javascript para producir el buscador personalizado de un listado.
La estructura generada es simple:
un campo por fila, con la correspondiente etiqueta a la izquierda;
un botón "Buscar" y, opcionalmente, un botón "Limpiar".
El parámetro $campos es un array de arrays, donde cada subarray describe un campo.
Las claves aceptadas son:
- 'nombre': (requerido) Nombre (ID) del campo
- 'etiqueta': (requerido) Texto a mostrar antes del campo
- 'teclaacceso': (opcional) Caracter usado como tecla rápida para acceder al campo
- 'limpiar': (boolean; opcional; default = true) ¿Se debe poner el valor del campo en vacío
cuando se presiona el botón "Limpiar"? Se puede usar 'limpiar' => false cuando no corresponda
aplicar el código javascript .value = '';
- 'tipo': (string; opcional) Tipo de campo a generar; los tipos aceptados (por el momento) son:
- 'texto': Campo de texto
- 'calendario': Campo de texto para fecha con calendario desplegable
- 'rangofechas': Dos campos de texto para fechas con calendario desplegable
- 'combo': Combo con valores dados explícitamente
- 'combobd': Combo con valores obtenidos de la base de datos
- 'listacampos': Lista de campos relacionados
- 'contenido': (string (HTML) - opcional) En caso de no usar el campo generado por 'tipo',
se puede pasar directamente el código HTML para el campo como valor de 'contenido'
Si se especifica el tipo de campo, de acuerdo a éste se aceptan otras claves:
- 'texto'
- 'etiqueta_pos': (opcional) Texto a mostrar a después del campo
- 'largomax': (opcional) Valor para el atributo maxlength del input
- 'ancho': (opcional) Valor para el atributo size del input
- 'valor': (opcional) Valor para el atributo value del input
- 'mayusculas': (boolean; opcional; default = XGAP_CONF_TEXTO_FORM_MAYUSCULAS)
¿Se debe pasar a mayúsculas el texto escrito en el campo? Notar que el valor
por defecto está dado por el parámetro de configuración de XGAP 'texto_form_mayusculas'.
- 'calendario'
- 'etiqueta_pos': (opcional) Texto a mostrar a después del campo
- 'valor': (opcional) Valor para el atributo value del input
- 'rangofechas'
- 'valor_[desde | hasta]': (opcional) Valor para el atributo value del [primer | segundo] input
- 'etiqueta_[desde | hasta]': (opcional; default = ['Desde' | 'Hasta']) Etiqueta para el [primer | segundo] campo;
vacío indica que no se debe generar la etiqueta
- 'nombre_[desde | hasta]': (opcional; default = "{$campos[i]['nombre']}_[desde | hasta]") Nombre (ID) del [primer | segundo] campo
- 'teclaacceso_[desde | hasta]': (opcional) Caracter usado como tecla rápida para acceder al [primer | segundo] campo
- El valor de 'teclaacceso' se ignora
- 'combo'
- 'etiqueta_pos': (opcional) Texto a mostrar a después del campo
- 'valores': (requerido) array en el formato requerido por el parámetro
$datos de Form::select()
- 'actual': valor del elemento seleccionado
- 'ancho': ancho en pixels para el combo
- 'combobd'
- 'etiqueta_pos': (opcional) Texto a mostrar a después del campo
- 'consulta': (requerido) SQL para obtener los datos del combo.
Debe retornar dos columnas; la primera con los valores y la segunda con las etiquetas
- 'actual': valor del elemento seleccionado
- 'ancho': ancho en pixels para el combo
- 'listacampos'
- 'campos': (array; requerido) Array que describe los campos de la lista.
Los valores deben tener el mismo formato que los de $campos,
excluyendo definiciones con 'tipo' == 'listacampos'
(es decir que no se pueden anidar listas de campos)
El array $campos también puede incluir separadores, definidos
por subarrays con la siguiente estructura:
- 'tipo' = 'separador': (string; obligatorio)
- 'titulo': (opcional) Texto a mostrar dentro del separador
Ejemplo:
$campos = array(
array(
'nombre' => 'plocalidad',
'etiqueta' => 'Localidad',
'teclaacceso' => 'l',
'tipo' => 'texto',
'ancho' => 60,
'valor' => $plocalidad
),
array(
'tipo' => 'separador',
'titulo' => 'Un separador'
),
array(
'nombre' => 'pfalta',
'etiqueta' => 'Fecha alta',
'tipo' => 'calendario',
'valor' => $pfalta
),
array(
'nombre' => 'pfperiodo',
'etiqueta' => 'Período',
'nombre_desde' => 'pfinicio',
'etiqueta_desde' => 'Inicio',
'valor_desde' => $pfinicio,
'nombre_hasta' => 'pffin',
'etiqueta_hasta' => 'Fin',
'valor_hasta' => $pffin,
'tipo' => 'rangofechas'
),
array(
'nombre' => 'pestado',
'etiqueta' => 'Estado',
'tipo' => 'combo',
'valores' => array(
'p' => 'Pendiente',
'f' => 'Finalizado'
),
'actual' => 'p'
),
array(
'nombre' => 'pestadocivil',
'etiqueta' => 'Estado Civil',
'tipo' => 'combobd',
'consulta' => 'SELECT id, nombre FROM estadocivil ORDER BY nombre',
'actual' => '1'
),
array(
'nombre' => 'phabilitado',
'etiqueta' => 'Habilitado',
'limpiar' => false,
'contenido' => Form::radio_grupo(
'phabilitado', '1', array('0' => 'No', '1' => 'Si'),
'h', 'Input', null, true)
),
array(
'nombre' => 'pdocumento',
'etiqueta' => 'Documento',
'tipo' => 'listacampos',
'campos' => array(
array(
'nombre' => 'pdocumentonro',
'etiqueta' => 'Nro.',
'tipo' => 'texto',
'ancho' => 10,
'valor' => $pdocumentonro
),
array(
'nombre' => 'pdocumentotipo',
'etiqueta' => 'Tipo',
'tipo' => 'combobd',
'consulta' => 'SELECT id, nombre FROM tipodocumento ORDER BY nombre'
)
)
)
);
Componentes::buscadorPersonalizadoSimple($campos, true, $objeto_conexion);
Parameters
array |
$campos |
definición de los campos del buscador |
boolean |
$incluir_navegador |
¿Se debe incluir el navegador? |
\Conexion |
$conexion |
conexión a la base de datos;
sólo se usa si alguno de los campos necesita hacer una consulta |