1 #LyX 1.3 created this file. For more info see http://www.lyx.org/
15 \use_numerical_citations 0
16 \paperorientation portrait
19 \paragraph_separation indent
21 \quotes_language english
25 \paperpagestyle default
29 Mecon Quick Form - HOWTO
32 Manuel Nazar Anchorena (manazar@mecon.gov.ar)
36 \begin_inset LatexCommand \tableofcontents{}
49 Este documento tiene por objetivo guiar al lector en el apasionante mundo
51 Este conjunto de librerias fue creado como extension del HTML Quick Form
52 de PEAR, para ajustarse a las necesidades del grupo de desarrollo de la
53 Intranet del Ministerio de Economía.
59 Abarcaremos aqui los pasos básicos para la creación de
60 \begin_inset Quotes eld
64 \begin_inset Quotes erd
67 comunes, que formarán parte de nuestro sistema.
68 Entre lo objetos de un formulario, veremos campos de texto, areas de texto,
69 fechas, botones de opciones, objetos ocultos y cajas de selección.
78 En esta sección se explicarán las características generales.
79 Están en el orden recomendado a seguir:
82 Declaración de Libreria.
85 Creación de Objetos de Formulario.
88 Creación de reglas de validación.
91 Instrucciones en el caso de que se valide y se carge la página a si misma.
94 Dibujar el Formulario.
108 Declaración de la librería
111 require_once 'MECON/HTML/QuickForm.php';
114 Con esta declaración, se incluyen en nuestro programa todas las clases de
120 new MECON_HTML_QuickForm()
122 : Creación nuevo formulario
125 var = new MECON_HTML_QuickForm(<nombre>, <método>, <accion>, <destino>,
133 nuestro manejador del formulario, con el se trabajará en adelante.
139 <acción> : Página destino, por defecto se toma la misma página (action).
142 <nombre> : Nombre del objeto formulario (name).
145 <destino> : Tipo de ventana destino que se armará.
160 <método> : Método con el que se enviarán los objetos del formulario:
170 <atributos> : Mas adelante.
176 $form = new MECON_HTML_QuickForm('otro.php','test','_blank','get');
179 $form = new MECON_HTML_QuickForm('','test','','');
182 addGroup() : Armar grupos de objetos
183 \begin_inset LatexCommand \label{sub:addGroup()-:-Armar}
190 $form->addGroup(<vector_elementos>, <nombre>, <titulo>, ' ', true);
193 Se crea un grupo con los elementos en
197 con el nombre igual a
201 y un título a la izquierda igual a
206 Los demás valores se recomienda no modificar.
211 Comenzaremos por explicar que es un grupo de objetos, imagine que tiene
212 varias casillas de verificación (checkbox), o un grupo de botones radio
214 Deseamos logicamente que estos aparezcan agrupados en el formulario, es
215 decir en la misma celda y no en celdas distintas.
216 Por esto es que se crean grupos.
219 Los elementos se crean de la siguiente manera:
222 HTML_QuickForm::createElement(<tipo>, <nombre>, <valor>)
225 Luego el elemento debe ser agregado al vector de elementos.
234 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op1', 'Pelele');
238 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op2', 'Tololo');
242 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op3', 'Pitiribí');
245 $form->addGroup($grupo, 'opciones', 'Opciones', ' ', true);
248 Como se observa, se creo un grupo de varios elementos del tipo casilla de
252 addElement() : Agregar objetos al formulario
255 $form->addElement(<tipo>,<nombre>, <opciones>);
258 Este es la primitava mas compleja, para poder explicarla usaré distintos
260 \layout Subsubsection
265 $form->addElement('header','cabecera', 'Título del formulario');
268 Con esta función creamos la cabecera del formulario, normalmente se incluye
269 una sola por formulario, pero puede darse el caso de incluir mas.
270 El segundo parámetro es para el renderizador, con opción
271 \begin_inset Quotes eld
275 \begin_inset Quotes erd
278 el estilo es centrado y es considerado mas importante que
279 \begin_inset Quotes eld
283 \begin_inset Quotes erd
286 , que tambien es centrado pero se lo considera un sub-item de
287 \begin_inset Quotes eld
291 \begin_inset Quotes erd
295 \layout Subsubsection
297 Elemento estático (etiqueta)
300 $form->addElement ('static' , <nombre> ,<titulo>,<texto>);
303 Se agrega una fila con un elemento estático, del tipo etiqueta.
304 Con un un texto a la izquierda con valor
308 y un texto de datos a la derecha con valor
316 $form->addElement ('static' , 'responsable' , 'Responsable' , 'hola');
319 Con este elemento, agramos una fila con el texto
320 \begin_inset Quotes eld
324 \begin_inset Quotes erd
327 como nombre de atributo (a la izquierda) y se visualiza el texto
328 \begin_inset Quotes eld
332 \begin_inset Quotes erd
335 en la columna de datos.
336 \layout Subsubsection
338 Elemento oculto (hidden)
341 $form->addElement ('hidden' , <nombre> , <valor>);
344 Se agrega al formulario un objeto oculto (hidden) con nombre igual a
358 $form->addElement ('hidden' , 'id_cliente' , '54');
359 \layout Subsubsection
361 Cuadro de Texto (text)
364 $form->addElement('text', <nombre>, <titulo>, <opciones>);
367 Se agrega al formulario un cuadro de texto con el nombre igual a <nombre>,
368 con título a la izquierda igual a <titulo> y un conjunto de opciones.
369 En el ejemplo se visualiza un caso común.
372 $form->addElement('text', 'name', 'Nombre', array('size' => '30', 'maxlength'
374 \layout Subsubsection
376 Area de Texto (textarea)
379 $form->addElement('textarea', <nombre>, <titulo>, <opciones>);
382 Se agrega al formulario un área de texto con el nombre igual a <nombre>,
383 con título a la izquierda igual a <titulo> y un conjunto de opciones.
384 En el ejemplo se visualiza un caso común.
387 $form->addElement('textarea', 'desc_sistema', 'Descripción', array('rows'
388 => '2','cols'=>'50'));
389 \layout Subsubsection
394 $form->addElement('mdate', <nombre>, <titulo>);
397 Se agrega al formulario un campo de fecha con el nombre igual a <nombre>,
398 con título a la izquierda igual a <titulo>.
399 En el ejemplo se visualiza un caso común.
402 $form->addElement('mdate', 'fecha', 'Fecha Implementación');
403 \layout Subsubsection
405 Caja de Selección (select)
408 $form->addElement ('select' , <nombre>, <titulo>, <vector_datos> , <opciones>);
411 Se agrega al formulario una caja de selección con el nombre igual a <nombre>,
412 con título a la izquierda igual a <titulo> y un conjunto de opciones.
419 $arr = array("clave1" => "valor1", "clave2" => "valor2", "clave3" => "valor3",
420 "clave4" => "valor4", "clave5" => "valor5", "clave6" => "valor6");
423 Esta es la inicialización del vector de datos.
426 $form->addElement ('select' , 'vector2' , 'Permisos' ,$arr , array('size'
430 Aqui se crea una caja de selección con la opción de seleccionar solo 1 valor
433 $form->addElement ('select' , 'vector1' , 'Permisos' ,$arr , array('size'
434 => sizeof($arr), 'multiple' => 'multiple'));
437 Aqui se crea una caja de selección con la opción de seleccionar múltiples
439 \layout Subsubsection
441 Casilla de Verificación (checkbox | radio)
442 \begin_inset LatexCommand \label{sub:Casilla-de-Verificación}
449 Para ambos casos (checkbox y radio button) es necesario crear un grupo de
450 elementos como se vio en
451 \begin_inset LatexCommand \ref{sub:addGroup()-:-Armar}
470 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op1', 'Pelele');
474 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op2', 'Tololo');
478 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op3', 'Pitiribí');
481 $form->addGroup($grupo, 'opciones', 'Opciones', ' ', true);
492 $grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pelele','','v1');
496 $grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Tololo','', 'v2');
500 $grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pitiribí','',
504 $form->addGroup($grupo, 'opciones2', 'Opciones 2', ' ', true);
507 En el caso de los Radio Button, el 4to.
508 parámetro es una etiqueta que se visualiza a la dereche del círculo de
509 opción, de todas formas su uso es poco común.
510 \layout Subsubsection
512 Botones de Formulario (button)
513 \begin_inset LatexCommand \label{sub:Botones-de-Formulario}
520 Para crear los botones de un formulario, recomendamos usar un grupo como
521 se vió en el ejemplo de la casilla de verificación en
522 \begin_inset LatexCommand \ref{sub:Casilla-de-Verificación}
527 Pero en este caso el grupo lo formarán botones.
533 $btn_aceptar =& HTML_QuickForm::createElement('submit', 'aceptar', 'Grabar');
536 $btn_cancelar =& HTML_QuickForm::createElement('reset', 'cancelar', 'Limpiar');
540 $grupo = array(); $grupo[] =& $btn_aceptar; $grupo[] =& $btn_cancelar;
543 $form->addGroup($grupo, 'botones');
549 Para poder imponer reglas en nuestro formulario, es necesario explicitarlos
551 Existen reglas para distintos elementos del formulario.
552 El MEcon Quick Form cuenta con un set de reglas registradas pero se le
557 $var->addRule(<nombre_elemento>, <texto>, <tipo_regla>);
560 Los parámetros tienen el siguiente significado.
563 <nombre_elemento> : Nombre del elemento del formulario (propiedad
567 ) al cual se le aplicará la regla.
570 <texto> : Texto que se visualizará en el caso que NO se cumpla con la regla.
573 <tipo_regla> : Tipo de la regla a aplicar.
576 Ejemplos de Tipos de reglas
579 A continuación se verán los ejemplos más comunes.
580 Dependiendo del tipo de regla, se necesita un parámetro adicional
581 \layout Subsubsection
583 "required" : Obligatorio
584 \begin_inset LatexCommand \label{sub:"required"-:-Obligatorio}
591 Obliga que el usuario complete ese campo.
592 Se visualiza al lado del nombre un asterisco indicando que es obligatorio.
598 $form->addRule('nombre_sistema', 'El campo nombre es obligatorio', 'required');
600 \layout Subsubsection
602 "maxlength" : Tamaño Máximo.
605 Determina el tamaño máximo del campo, se le comunica al usuario el tamaño
612 $form->addRule('nombre_sistema', 'El tamaño debe ser a lo sumo de 20', 'maxlengt
614 \layout Subsubsection
616 "minlength" : Tamaño Mínimo.
619 Determina el tamaño mínimo del campo, se le comunica al usuario el tamaño
626 $form->addRule('nombre_sistema', 'El tamaño debe ser por lo menos de 5',
628 \layout Subsubsection
630 "fecha" : Fecha Válida
633 Determina si la fecha es válida, ejemplo: (31 de febrero).
639 $form->addRule('fecha_inicial', 'La fecha no es válida', 'fecha');
640 \layout Subsubsection
642 "rangelength" : Tamaño dentro de un Rango FALTA
645 se solicita enviar ejemplo
646 \layout Subsubsection
648 "regex" : Validar con expresion regular
651 Obliga que el campo cumpla con la expresión regular estipulada.
657 $form->addRule('nombre_sistema', 'No cumple, debe contener el texto rodolfo',
658 'regex', '/rodolfo/');
659 \layout Subsubsection
661 "email" : Valida que sea Email
664 Valida que el texto ingresado sea sintácticamente correcto.
665 Sin embargo puede estar vacío, se puede combinar con
668 \begin_inset LatexCommand \ref{sub:"required"-:-Obligatorio}
675 $form->addRule('txt_email', 'Error de sintaxis', 'email');
676 \layout Subsubsection
681 se solicita enviar ejemplo
682 \layout Subsubsection
684 "lettersonly" : Todas letras
687 Valida que el texto ingresado contenga solamente letras
690 $form->addRule('nombre_sistema', 'Solo se permiten letras ', 'lettersonly');
691 \layout Subsubsection
693 "alphanumeric" : Todos letras y numeros
696 Valida que el texto ingresado sea alfanumérico, acepta letros o números
698 No permite caracteres especiales como '?', '
703 $form->addRule('nombre_sistema', 'Solo se permiten letras y números', 'alphanume
705 \layout Subsubsection
710 Valida que el texto ingresado contenga solamente números
713 * $form->addRule('nombre_sistema', 'Solo se permiten números', 'numeric');
714 \layout Subsubsection
719 se solicita enviar ejemplo
720 \layout Subsubsection
725 se solicita enviar ejemplo
726 \layout Subsubsection
731 se solicita enviar ejemplo
732 \layout Subsubsection
737 se solicita enviar ejemplo
738 \layout Subsubsection
743 se solicita enviar ejemplo
744 \layout Subsubsection
749 se solicita enviar ejemplo
752 Accionar del formulario
755 Aqui se verá la forma de acceder al formulario cuando se han cumplido todas
756 las reglas de validación (haya o no).
764 // Se valida, freezea el formulario y pide confirmación.
767 if ($form->validate()) {
772 $tmp = $form->getSubmitValue('botones');
777 if (@$tmp['aceptar'] == 'Grabar') {
791 $btn_aceptar->setValue('Confirmar');
801 elseif (@$tmp['aceptar'] == 'Confirmar') {
808 echo 'Aca Meto el Proceso de grabacion, eliminacion, etc';
815 $var = "grabacion_exitosa.php";
822 header('Location: '.$var);
833 echo $form->toHtml();
836 Como se observa, primero solicita que se validen los datos del formulario,
837 luego hay que ver en que instancia se encuentra, si en confirmación o en
838 la posterior a la confirmación.
839 Si no cumple con ninguna de las opciones, dibuja el formulario.
840 Para ver en que instancia se encuentra, se solicita el valor del grupo
842 \begin_inset LatexCommand \ref{sub:Botones-de-Formulario}
847 Recomendamos ver los ejemplos
848 \begin_inset LatexCommand \ref{sec:Ejemplos-Completos}
855 Dibujar el formulario
858 Este paso simplemente solicita que se dibuje el formulario bajo las condiciones
859 dadas en los pasos anteriores.
865 Si en vez de mostrar el formulario con los campos
866 \begin_inset Quotes eld
870 \begin_inset Quotes erd
873 , deseamos que los muestre como simple texto, se debe anteponer a
883 Esto es útil cuando se desea por ejemplo mostrar los datos ingresados en
884 el formulario solicitando una confirmación, antes de trabajar con ellos.
885 Recomendamos ver los ejemplos
886 \begin_inset LatexCommand \ref{sec:Ejemplos-Completos}
894 \begin_inset LatexCommand \label{sec:Ejemplos-Completos}
901 Archivo ejemplar estandar
904 A continuación se muestra un ejemplo sencillo pero que abarca todos los
905 temas vistos en este HOWTO
913 <TITLE>Prueba de renderer</TITLE>
916 <LINK rel="stylesheet" href="/MECON/css/general_estilos.css" type="text/css"/>
923 require_once 'MECON/HTML/QuickForm.php';
926 //(nombre,metodo,accion,target) target _self _blank
929 $form = new MECON_HTML_QuickForm('test','post','','');
934 //Agrega los elementos comunes a todas las opciones
937 $form->addElement('header','cabecera', 'Título del formulario');
942 //Agregar un objeto estatico..
946 $form->addElement ('static' , 'responsable' , 'Responsable' , 'hola');
951 // Agregar un objeto oculto (hidden)
954 $form->addElement ('hidden' , 'id_cliente' , '54');
959 $form->addElement('text', 'nombre_sistema','Nombre', array('size' => '30',
960 'maxlength' => '30'));
965 $form->addElement('textarea', 'desc_sistema', 'Descripción', array('rows'
966 => '2','cols'=>'50'));
971 $form->addElement('mdate', 'fecha', 'Fecha Implementación');
976 // Agrego un grupo de prueba separado por <BR>s.
983 $grupo[] =& HTML_QuickForm::createElement('mdate', 'desde', 'Desde');
986 $grupo[] =& HTML_QuickForm::createElement('mdate', 'hasta', 'Hasta');
989 $form->addGroup($grupo, 'fecha_group', 'Intervalo', '<BR>', true);
994 // Agregar 2 objetos select a partir de un array
997 $arr = array("clave1" => "valor1", "clave2" => "valor2", "clave3" => "valor3",
998 "clave4" => "valor4", "clave5" => "valor5", "clave6" => "valor6");
1001 $form->addElement ('select' , 'vector1' , 'Permisos' ,$arr , array('size'
1002 => sizeof($arr), 'multiple' => 'multiple'));
1005 $form->addElement ('select' , 'vector2' , 'Permisos' ,$arr , array('size'
1011 // Agrega otro grupo de prueba, separado por un espacio.
1017 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op1', 'Pelele');
1021 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op2', 'Tololo');
1025 $grupo[] =& HTML_QuickForm::createElement('checkbox', 'op3', 'Pitiribí');
1028 $form->addGroup($grupo, 'opciones', 'Opciones', ' ', true);
1033 // Agrega otro grupo de prueba, separado por un espacio.
1040 $grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pelele','','v1');
1044 $grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Tololo','', 'v2');
1048 $grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pitiribí','',
1052 $form->addGroup($grupo, 'opciones2', 'Opciones 2', ' ', true);
1057 // Agrega un grupo especial de botones.
1060 $btn_aceptar =& HTML_QuickForm::createElement('submit', 'aceptar', 'Grabar');
1063 $btn_cancelar =& HTML_QuickForm::createElement('reset', 'cancelar', 'Limpiar');
1069 $grupo[] =& $btn_aceptar;
1072 $grupo[] =& $btn_cancelar;
1075 $form->addGroup($grupo, 'botones');
1080 // Agrega las reglas de validacion
1083 $form->addRule('nombre_sistema', 'El campo nombre es obligatorio', 'required');
1086 $form->addRule('nombre_sistema', 'El tamaño máximo es 10', 'maxlength',
1090 $form->addRule('nombre_sistema', 'El campo debe ser alfanumérico', 'alphanumeric
1094 $form->addRule('desc_sistema', 'El campo descripcion es obligatorio', 'required'
1098 $form->addRule('contacto', 'El campo contacto es obligatorio', 'required');
1101 $form->addRule('fecha', 'La fecha no es válida', 'fecha');
1104 $form->addRule('fecha', 'El campo fecha es obligatorio', 'required', '');
1108 $form->addRule('desde', 'La fecha no es válida', 'fecha');
1111 $form->addRule('hasta', 'La fecha no es válida', 'fecha');
1116 // Se valida, freezea el formulario y pide confirmación.
1120 if ($form->validate()) {
1125 $tmp = $form->getSubmitValue('botones');
1130 if (@$tmp['aceptar'] == 'Grabar') {
1144 $btn_aceptar->setValue('Confirmar');
1149 } elseif (@$tmp['aceptar'] == 'Confirmar') {
1156 echo 'Aca Meto el Proceso de grabacion, eliminacion, etc';
1163 $var = "grabacion_exitosa.php";
1170 header('Location: '.$var);
1181 echo $form->toHtml();