]> git.llucax.com Git - mecon/meconlib.git/commitdiff
Se agregan HOWTOs a la documentacion.
authorLeandro Lucarella <llucax@gmail.com>
Thu, 5 Aug 2004 15:24:55 +0000 (15:24 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 5 Aug 2004 15:24:55 +0000 (15:24 +0000)
doc/creacion_sistemas.lyx [new file with mode: 0644]
doc/mecon_graph.lyx [new file with mode: 0644]
doc/mecon_quickform.lyx [new file with mode: 0644]

diff --git a/doc/creacion_sistemas.lyx b/doc/creacion_sistemas.lyx
new file mode 100644 (file)
index 0000000..a28398c
--- /dev/null
@@ -0,0 +1,383 @@
+#LyX 1.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 221
+\textclass book
+\language spanish
+\inputencoding auto
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Creación de Sistemas para la Intranet
+\layout Author
+
+Manuel Nazar Anchorena (manazar@mecon.gov.ar)
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Chapter
+
+Introducción 
+\layout Section
+
+Resumen
+\layout Standard
+
+El siguiente documento intenta explicar en pasos sencillos la creación e
+ inicialización de un sistema nuevo para la Intranet del Ministerio de Economía.
+ El objetivo del documento es guiar a los distintos desarrolladores en la
+ creación de sus aplicaciones, bajo ningún motivo este documento desea exponer
+ de forma completa el proceso, sino un resumen o 
+\begin_inset Quotes eld
+\end_inset 
+
+guía rápida
+\begin_inset Quotes erd
+\end_inset 
+
+ del mismo.
+ El autor agradece la colaboración de la Ex- Dirección General de Informática.
+\layout Standard
+
+Para la creación de sistemas nuevos en la intranet es necesario tener un
+ usuario creado en el servidor de desarrollo (bal747f en el momento de creación
+ de este documento), luego, son necesarios ciertos pasos comunes a todos
+ los proyectos.
+ Estos son:
+\layout Itemize
+
+Inicialización: (Generación de Repositorio y obtención del mismo)
+\layout Itemize
+
+Creación del diagrama de clases (utilizando el Umbrello)
+\layout Itemize
+
+Creación de las librerias locales en base al diagrama de clases (utilizando
+ el xmi2code)
+\layout Itemize
+
+Creación de la documentación de las clases y las librerías locales (utilizando
+ el Doxygen).
+\layout Section
+
+Requerimientos de Software
+\layout Standard
+
+En la máquina local donde se trabaja son necesarios las siguiente aplicaciones.
+\layout Itemize
+
+Umbrello
+\layout Itemize
+
+Xmi2code
+\layout Itemize
+
+Doxygen (utiliza a su vez Graphviz)
+\layout Standard
+
+Hasta la fecha, solo Umbrello y Xmi2code no estaban soportado por Debian
+ y requerian una instalación separada bajando los paquetes .deb por separado
+ (ver 
+\begin_inset LatexCommand \vref{sec:Links-Utiles}
+
+\end_inset 
+
+).
+\layout Section
+
+
+\begin_inset LatexCommand \label{sec:Links-Utiles}
+
+\end_inset 
+
+Links Utiles
+\layout List
+\labelwidthstring 00.00.0000
+
+PEAR: http://pear.php.net/
+\layout List
+\labelwidthstring 00.00.0000
+
+Manual\SpecialChar ~
+de\SpecialChar ~
+PEAR: http://pear.php.net/manual/en/
+\layout List
+\labelwidthstring 00.00.0000
+
+PEAR\SpecialChar ~
+Coding\SpecialChar ~
+Standards: http://pear.php.net/manual/en/standards.php
+\layout List
+\labelwidthstring 00.00.0000
+
+Quickform: http://www.appelsiini.net/~tuupola/php/peardoc2/package.html.html#package.
+html.html-quickform
+\layout List
+\labelwidthstring 00.00.0000
+
+xmi2code: http://xmi2code.sourceforge.net/
+\layout List
+\labelwidthstring 00.00.0000
+
+umbrello: http://uml.sourceforge.net/
+\layout Chapter
+
+Inicialización: 
+\layout Section
+
+Generación del Repositorio.
+\layout Standard
+
+Utilización la Herramienta SAPO (Sistema de Administración de Portal y Otros)
+ en http://portal.mecon.ar para crear el repositorio SVN.
+\layout Itemize
+
+Seleccionar 
+\begin_inset Quotes eld
+\end_inset 
+
+Creador de Repositorios Subversion
+\begin_inset Quotes erd
+\end_inset 
+
+.
+\layout Itemize
+
+Loguearse (si no se es usuario, contactarse con el Admin.
+ de SAPO).
+\layout Itemize
+
+Completar Nombre del Repositorio (recomendación: sea corto.
+ Ej: procad) y la Descripción del mismo (Ej: Sistema de Capacitación On-Line).
+\layout Itemize
+
+Seleccionar los usuarios habilitados a subir cambios al repositorio, todos
+ los usuarios pueen bajar el sistema, solo los autorizados aquí pueden subir
+ cambios.
+\layout Itemize
+
+Accionar el botón de creación, a continuación se visualiza el proceso de
+ creación.
+ La última línea describe como realizar un 
+\begin_inset Quotes eld
+\end_inset 
+
+check out
+\begin_inset Quotes erd
+\end_inset 
+
+, es decir, como bajar la última versión del repositorio.(svn co http://
+ ...)
+\layout Section
+
+Bajar por primera vez el repositorio
+\layout Standard
+
+En este paso obtendremos por primera vez el repositorio del sistema creado
+ recientemente, para ello es necesario ubicarse en un directorio donde el
+ servidor web pueda leer archivos (ej: /home/<usuario>/public_html).
+ Para ello, debemos loguearnos en el servidor de desarrollo con nuestro
+ usuario asignado.
+\layout Itemize
+
+Ejecutar: 
+\series bold 
+$ svn co http://portal.mecon.ar/svn/procad/tronco/ procad
+\series default 
+ .
+\begin_inset Quotes eld
+\end_inset 
+
+co
+\begin_inset Quotes erd
+\end_inset 
+
+ es la operación Check Out, luego sige la ubicación del repositorio y el
+ último parámetro es la carpeta de destino, si no existe se creará.
+\layout Itemize
+
+Se nos pedirá la contraseña del usuario del servidor de desarrollo, de tener
+ otro nombre de usuario en el servidor SVN, apretar ENTRAR y se nos pedirá
+ un nombre de usuario y una contraseña.
+\layout Itemize
+
+Es importante que no exista de antemano el directorio destino.
+ Si no hubo problemas, se muestra en pantalla los nombres de los archivos
+ y para finalizar el número de versión actual (probablemente 3, el SVN realiza
+ 2 commit internos en la creación del mismo).
+\layout Itemize
+
+Para comprender la estructura de directorios creada, existe un archivo README
+ en la raiz del sistema.
+ A su vez, existen archivos README en todos los directorios que muestran
+ el contenido de los mismos (a continuación podremos eliminarlos a todos).
+\layout Section
+
+Generación de los archivos básicos de configuración.
+\layout Standard
+
+En esta sección se explica como generar automáticamente los archivos de
+ configuración del sistema y de las aplicaciones que complementan al mismo
+ (xmi2code, Doxygen, Umbrello).
+\layout Itemize
+
+Ejecutar 
+\series bold 
+$ make init
+\series default 
+ .
+ Se nos pregunta por el nombre del Sistema, puede ser distinto al nombre
+ del Repositorio y ser una frase.
+\layout Itemize
+
+A continuación se nos pide el nombre del desarrollador (o responsable del
+ sistema) y el email del mismo.
+ Atención con el formato con que nos pide ingresar los datos.
+\layout Itemize
+
+Automáticamente se abrirán 3 archivosde configuración, 2 pertenecen a xmi2code
+ y uno a Doxygen.
+ Para una instalación estándar no es necesario modificar ninguno de los
+ archivos.
+ Salga del editor.
+\layout Itemize
+
+Este paso es opcional, si desea eliminar todos los archivos README del sistema
+ ejecutar 
+\series bold 
+$ make clean-readme .
+\layout Chapter
+
+Creación Diagrama de Clases.
+\layout Section
+
+Archivos Template
+\layout Standard
+
+En el repositorio creado, se generó automáticamente un archivo estándar
+ para ser utilizado con el Umbrello.
+ Este se encuentra en el directorio doc/ de nuestro sistema.
+ Se llama uml.xmi.
+\layout Section
+
+Edición con Umbrello
+\layout Itemize
+
+Abrir con umbrello el archivo uml.xmi
+\layout Itemize
+
+Crear las clases correspondientes y especialemente la documentación de las
+ clases, atributos y métodos (estos datos son importantes para la generación
+ de las librerias y de la documentación).
+\layout Itemize
+
+Corroborar la coherencia de la documentación en los distintos elementos,
+ existen ciertos bugs (errores) en el Umbrello que hace que el último cambio
+ de una 
+\begin_inset Quotes eld
+\end_inset 
+
+documentación
+\begin_inset Quotes erd
+\end_inset 
+
+ de un objeto no sea actualizada, solo desde la vista del panel navegable
+ de la izquierda funciona (ver website Umbrello http://uml.sourceforge.net/).
+\layout Itemize
+
+Nota: La única relación que modifica el contenido de la libreria generada
+ con el xmi2code es la herencia (Generalización).
+\layout Itemize
+
+Si se desea heredar clases externas al sistema, es necesario crearla con
+ el Umbrello, sin atributos ni métodos.
+ Simplemente póngale el nombre de la clase (Ej: HTML_Table, es una clase
+ de PEAR).
+ Luego realize la relación con la clase local que hereda de la externa.
+ Finalmente, en la documentación de la clase externa poner una linea que
+ diga: 
+\series bold 
+x2c:extern .
+\series default 
+Si el nombre de la clase externa no es el mismo que en pear, se debe agregar
+ la ruta del archivo donde se define la clase Ej: 
+\series bold 
+x2c:include:HTML/Table.php
+\series default 
+.
+ Otro ejemplo es la clase Tabla.
+ En este caso sería 
+\series bold 
+x2c:include:MECON/HTML/Tabla.php .
+\layout Itemize
+
+Se le puede indicar al xmi2code que genere automáticamente 2 métodos para
+ un atributo.
+ Estos son: de seteo del valor (set) y de obtención del valor (get).
+ Para lograr esto es necesario agregar en la documentación del atributo
+ una línea como la siguiente: 
+\series bold 
+x2c: get set
+\layout Chapter
+
+Utilización de Xmi2code y Doxygen
+\layout Section
+
+Generación de la librería local.
+\layout Standard
+
+En esta sección veremos como se generan automáticamente las librerías locales
+ en <nombre_sistema>/sistema/local_lib .
+\layout Itemize
+
+Ejecutar en doc/ 
+\series bold 
+$ xmi2code , 
+\series default 
+si no hubo problemas deberian existir en sistema/local_lib/ unos archivos
+ PHP con las declaraciones de las clases locales al sistema.
+\layout Itemize
+
+Si se ejecuta dos veces el xmi2code, los archivos viejos son renombrados
+ con la extensión 
+\series bold 
+.bak.
+\layout Section
+
+Generación de la Documentación de la librería local.
+\layout Itemize
+
+Ejecutar desde doc/ 
+\series bold 
+$ doxygen
+\series default 
+ , si no hubo problemas, se creó la documentación de la librería, para corrobora
+rlo, ir a http://<host>/~<usuario>/<nom_sistema>/doc/api/html/ ejemplo:
+ http://bal747f.mecon.ar/~manazar747f/procad/doc/api/html/ .
+\the_end
diff --git a/doc/mecon_graph.lyx b/doc/mecon_graph.lyx
new file mode 100644 (file)
index 0000000..046c649
--- /dev/null
@@ -0,0 +1,178 @@
+#LyX 1.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 221
+\textclass article
+\language spanish
+\inputencoding auto
+\fontscheme default
+\graphics default
+\paperfontsize default
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+MECON_Graph mini howto
+\layout Author
+
+Manuel Nazar Anchorena
+\layout Section
+
+¿Como funciona?
+\layout Subsection
+
+Introduccion
+\layout Standard
+
+
+\series bold 
+MECON_Graph
+\series default 
+ encapsula a la libreria 
+\series bold 
+JPGraph
+\series default 
+\series bold 
+( http://www.aditus.nu/jpgraph/index.php ),
+\series default 
+ proviendo a los progrmadores una forma sencilla de generar graficos.
+\layout Standard
+
+JPGraph utiliza la libreria de PHP llamada 
+\series bold 
+GD
+\series default 
+, esta se encarga de la manipulacion de imagenes.
+\layout Subsection
+
+Como embeber un grafico en HTML
+\layout Standard
+
+El objeto MECON_Graph genera un script que devuelve un grafico PNG.
+ Por esto, es que no se puede poner el codigo directamente en la pagina
+ (como se suele hacer con cualquier funcion o clase en PHP).
+\layout Standard
+
+Para resolver esto, se debe utilizar el tag html IMG, en la propiedad SRC,
+ se debe poner una pagina con extension .php que contiene solamente el script
+ del objeto MECON_Graph que genera la imagen.
+\layout Standard
+
+ejemplo:
+\layout LyX-Code
+
+<img border=
+\begin_inset Quotes erd
+\end_inset 
+
+0
+\begin_inset Quotes erd
+\end_inset 
+
+ src=
+\begin_inset Quotes erd
+\end_inset 
+
+archivo.php
+\begin_inset Quotes erd
+\end_inset 
+
+>
+\layout Standard
+
+Tambien se le puede enviar parametros al script que genera la imagen
+\layout LyX-Code
+
+<img border=
+\begin_inset Quotes erd
+\end_inset 
+
+0
+\begin_inset Quotes erd
+\end_inset 
+
+ src=
+\begin_inset Quotes erd
+\end_inset 
+
+archivo.php?a=2&b=pepe
+\begin_inset Quotes erd
+\end_inset 
+
+>
+\layout Section
+
+Aprendiendo con un ejemplo
+\layout Standard
+
+Para mayor informacion dirigirse a la documentacion de MECONLIB
+\layout LyX-Code
+
+require_once 'MECON/Graph.php';
+\layout LyX-Code
+
+\layout LyX-Code
+
+$tipo_grafico = 'xy';
+\layout LyX-Code
+
+$tipo_secuencia = 'barras'; 
+\layout LyX-Code
+
+\layout LyX-Code
+
+//Si se quiere usar una torta3D
+\layout LyX-Code
+
+$tipo_grafico = 'torta3D';
+\layout LyX-Code
+
+$tipo_secuencia = '';
+\layout LyX-Code
+
+//fin si es torta3d
+\layout LyX-Code
+
+\layout LyX-Code
+
+$leyendas = array('Bajo','Medio','Alto');
+\layout LyX-Code
+
+$attrib_gral=array( 'verValores'=>true, 'Ytitulo'=>'Cantidad de Respuestas',
+ 'XEtiquetas'=>$leyendas);
+\layout LyX-Code
+
+\layout LyX-Code
+
+$graph =& new MECON_Graph ($tipo_grafico, 460, 440, $titulo, $attrib_gral);
+\layout LyX-Code
+
+$valores = array(10,20,30);
+\layout LyX-Code
+
+$posLeyenda = array(0.01, 0.01);
+\layout LyX-Code
+
+$attribs = array('leyendas'=>$leyendas, 'posLeyenda'=>$posLeyenda, 'formatoValor
+es'=>"%.0f");
+\layout LyX-Code
+
+$graph->agregarSecuencia($tipo_secuencia, $valores, $attribs);
+\layout LyX-Code
+
+$graph->generar(); 
+\the_end
diff --git a/doc/mecon_quickform.lyx b/doc/mecon_quickform.lyx
new file mode 100644 (file)
index 0000000..125afb6
--- /dev/null
@@ -0,0 +1,1193 @@
+#LyX 1.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 221
+\textclass book
+\language spanish
+\inputencoding auto
+\fontscheme default
+\graphics default
+\paperfontsize default
+\spacing single 
+\papersize Default
+\paperpackage a4
+\use_geometry 0
+\use_amsmath 0
+\use_natbib 0
+\use_numerical_citations 0
+\paperorientation portrait
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\defskip medskip
+\quotes_language english
+\quotes_times 2
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+
+\layout Title
+
+Mecon Quick Form - HOWTO
+\layout Author
+
+Manuel Nazar Anchorena (manazar@mecon.gov.ar)
+\layout Standard
+
+
+\begin_inset LatexCommand \tableofcontents{}
+
+\end_inset 
+
+
+\layout Chapter
+
+Introducción 
+\layout Section
+
+Resumen
+\layout Standard
+
+Este documento tiene por objetivo guiar al lector en el apasionante mundo
+ del MEcon Quick Form.
+ Este conjunto de librerias fue creado como extension del HTML Quick Form
+ de PEAR, para ajustarse a las necesidades del grupo de desarrollo de la
+ Intranet del Ministerio de Economía.
+\layout Section
+
+Contenido
+\layout Standard
+
+Abarcaremos aqui los pasos básicos para la creación de 
+\begin_inset Quotes eld
+\end_inset 
+
+formularios
+\begin_inset Quotes erd
+\end_inset 
+
+ comunes, que formarán parte de nuestro sistema.
+ Entre lo objetos de un formulario, veremos campos de texto, areas de texto,
+ fechas, botones de opciones, objetos ocultos y cajas de selección.
+\layout Chapter
+
+El lenguaje
+\layout Section
+
+Breve panorama
+\layout Standard
+
+En esta sección se explicarán las características generales.
+ Están en el orden recomendado a seguir:
+\layout Enumerate
+
+Declaración de Libreria.
+\layout Enumerate
+
+Creación de Objetos de Formulario.
+\layout Enumerate
+
+Creación de reglas de validación.
+\layout Enumerate
+
+Instrucciones en el caso de que se valide y se carge la página a si misma.
+\layout Enumerate
+
+Dibujar el Formulario.
+\layout Section
+
+Pasos Básicos
+\layout Subsection
+
+
+\emph on 
+require_once
+\emph default 
+ :
+\emph on 
+\emph default 
+Declaración de la librería
+\layout LyX-Code
+
+require_once 'MECON/HTML/QuickForm.php'; 
+\layout Standard
+
+Con esta declaración, se incluyen en nuestro programa todas las clases de
+ MEcon Quick Form.
+\layout Subsection
+
+
+\emph on 
+new MECON_HTML_QuickForm()
+\emph default 
+ : Creación nuevo formulario
+\layout LyX-Code
+
+var = new MECON_HTML_QuickForm(<nombre>, <método>, <accion>, <destino>,
+ <atributos>); 
+\layout Standard
+
+La variable 
+\emph on 
+var
+\emph default 
+ nuestro manejador del formulario, con el se trabajará en adelante.
+\layout Standard
+
+Parámetros:
+\layout Itemize
+
+<acción> : Página destino, por defecto se toma la misma página (action).
+\layout Itemize
+
+<nombre> : Nombre del objeto formulario (name).
+\layout Itemize
+
+<destino> : Tipo de ventana destino que se armará.
+ Ej: 
+\emph on 
+_blank 
+\emph default 
+: Nueva; 
+\emph on 
+_self
+\emph default 
+ : Sobre la misma.
+ Por defecto se toma 
+\emph on 
+_self.
+\layout Itemize
+
+<método> : Método con el que se enviarán los objetos del formulario: 
+\emph on 
+post y get.
+
+\emph default 
+ Por defecto se toma 
+\emph on 
+post.
+\layout Itemize
+
+<atributos> : Mas adelante.
+\layout Standard
+
+Ejemplos:
+\layout LyX-Code
+
+$form = new MECON_HTML_QuickForm('otro.php','test','_blank','get'); 
+\layout LyX-Code
+
+$form = new MECON_HTML_QuickForm('','test','',''); 
+\layout Subsection
+
+addGroup() : Armar grupos de objetos
+\begin_inset LatexCommand \label{sub:addGroup()-:-Armar}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+$form->addGroup(<vector_elementos>, <nombre>, <titulo>, ' ', true); 
+\layout Standard
+
+Se crea un grupo con los elementos en 
+\emph on 
+<vector_elementos>
+\emph default 
+ con el nombre igual a 
+\emph on 
+<nombre>
+\emph default 
+ y un título a la izquierda igual a 
+\emph on 
+<titulo>
+\emph default 
+.
+ Los demás valores se recomienda no modificar.
+\newline 
+
+\layout Standard
+
+Comenzaremos por explicar que es un grupo de objetos, imagine que tiene
+ varias casillas de verificación (checkbox), o un grupo de botones radio
+ (radio button).
+ Deseamos logicamente que estos aparezcan agrupados en el formulario, es
+ decir en la misma celda y no en celdas distintas.
+ Por esto es que se crean grupos.
+\layout Standard
+
+Los elementos se crean de la siguiente manera:
+\layout LyX-Code
+
+HTML_QuickForm::createElement(<tipo>, <nombre>, <valor>)
+\layout Standard
+
+Luego el elemento debe ser agregado al vector de elementos.
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$grupo = array(); 
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op1', 'Pelele');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op2', 'Tololo');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op3', 'Pitiribí');
+\layout LyX-Code
+
+$form->addGroup($grupo, 'opciones', 'Opciones', ' ', true);
+\layout Standard
+
+Como se observa, se creo un grupo de varios elementos del tipo casilla de
+ verificación.
+\layout Subsection
+
+addElement() : Agregar objetos al formulario 
+\layout LyX-Code
+
+$form->addElement(<tipo>,<nombre>, <opciones>);
+\layout Standard
+
+Este es la primitava mas compleja, para poder explicarla usaré distintos
+ ejemplos.
+\layout Subsubsection
+
+Cabecera (header)
+\layout LyX-Code
+
+$form->addElement('header','cabecera', 'Título del formulario'); 
+\layout Standard
+
+Con esta función creamos la cabecera del formulario, normalmente se incluye
+ una sola por formulario, pero puede darse el caso de incluir mas.
+ El segundo parámetro es para el renderizador, con opción 
+\begin_inset Quotes eld
+\end_inset 
+
+cabecera
+\begin_inset Quotes erd
+\end_inset 
+
+ el estilo es centrado y es considerado mas importante que 
+\begin_inset Quotes eld
+\end_inset 
+
+titulo
+\begin_inset Quotes erd
+\end_inset 
+
+, que tambien es centrado pero se lo considera un sub-item de 
+\begin_inset Quotes eld
+\end_inset 
+
+cabecera
+\begin_inset Quotes erd
+\end_inset 
+
+\layout Subsubsection
+
+Elemento estático (etiqueta)
+\layout LyX-Code
+
+$form->addElement ('static' , <nombre> ,<titulo>,<texto>); 
+\layout Standard
+
+Se agrega una fila con un elemento estático, del tipo etiqueta.
+ Con un un texto a la izquierda con valor 
+\emph on 
+<titulo>
+\emph default 
+ y un texto de datos a la derecha con valor 
+\emph on 
+<texto>
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$form->addElement ('static' , 'responsable' , 'Responsable' , 'hola');
+\layout Standard
+
+Con este elemento, agramos una fila con el texto 
+\begin_inset Quotes eld
+\end_inset 
+
+Responsable
+\begin_inset Quotes erd
+\end_inset 
+
+ como nombre de atributo (a la izquierda) y se visualiza el texto 
+\begin_inset Quotes eld
+\end_inset 
+
+hola
+\begin_inset Quotes erd
+\end_inset 
+
+ en la columna de datos.
+\layout Subsubsection
+
+Elemento oculto (hidden)
+\layout LyX-Code
+
+$form->addElement ('hidden' , <nombre> , <valor>); 
+\layout Standard
+
+Se agrega al formulario un objeto oculto (hidden) con nombre igual a 
+\emph on 
+<nombre>
+\emph default 
+ y valor igual a 
+\emph on 
+<valor>
+\emph default 
+.
+\layout Standard
+
+Ejemplo
+\layout LyX-Code
+
+$form->addElement ('hidden' , 'id_cliente' , '54'); 
+\layout Subsubsection
+
+Cuadro de Texto (text)
+\layout LyX-Code
+
+$form->addElement('text', <nombre>, <titulo>, <opciones>); 
+\layout Standard
+
+Se agrega al formulario un cuadro de texto con el nombre igual a <nombre>,
+ con título a la izquierda igual a <titulo> y un conjunto de opciones.
+ En el ejemplo se visualiza un caso común.
+\layout LyX-Code
+
+$form->addElement('text', 'name', 'Nombre', array('size' => '30', 'maxlength'
+ => '30'));
+\layout Subsubsection
+
+Area de Texto (textarea)
+\layout LyX-Code
+
+$form->addElement('textarea', <nombre>, <titulo>, <opciones>);
+\layout Standard
+
+Se agrega al formulario un área de texto con el nombre igual a <nombre>,
+ con título a la izquierda igual a <titulo> y un conjunto de opciones.
+ En el ejemplo se visualiza un caso común.
+\layout LyX-Code
+
+$form->addElement('textarea', 'desc_sistema', 'Descripción', array('rows'
+ => '2','cols'=>'50'));
+\layout Subsubsection
+
+Campo de Fecha
+\layout LyX-Code
+
+$form->addElement('mdate', <nombre>, <titulo>); 
+\layout Standard
+
+Se agrega al formulario un campo de fecha con el nombre igual a <nombre>,
+ con título a la izquierda igual a <titulo>.
+ En el ejemplo se visualiza un caso común.
+\layout LyX-Code
+
+$form->addElement('mdate', 'fecha', 'Fecha Implementación'); 
+\layout Subsubsection
+
+Caja de Selección (select)
+\layout LyX-Code
+
+$form->addElement ('select' , <nombre>, <titulo>, <vector_datos> , <opciones>);
+\layout Standard
+
+Se agrega al formulario una caja de selección con el nombre igual a <nombre>,
+ con título a la izquierda igual a <titulo> y un conjunto de opciones.
+\layout Standard
+
+Ejemplos:
+\layout LyX-Code
+
+$arr = array("clave1" => "valor1", "clave2" => "valor2", "clave3" => "valor3",
+ "clave4" => "valor4", "clave5" => "valor5", "clave6" => "valor6");
+\layout Standard
+
+Esta es la inicialización del vector de datos.
+\layout LyX-Code
+
+$form->addElement ('select' , 'vector2' , 'Permisos' ,$arr , array('size'
+ => '1')); 
+\layout Standard
+
+Aqui se crea una caja de selección con la opción de seleccionar solo 1 valor
+\layout Itemize
+
+$form->addElement ('select' , 'vector1' , 'Permisos' ,$arr , array('size'
+ => sizeof($arr), 'multiple' => 'multiple'));
+\layout Standard
+
+Aqui se crea una caja de selección con la opción de seleccionar múltiples
+ valores.
+\layout Subsubsection
+
+Casilla de Verificación (checkbox | radio)
+\begin_inset LatexCommand \label{sub:Casilla-de-Verificación}
+
+\end_inset 
+
+
+\layout Standard
+
+Para ambos casos (checkbox y radio button) es necesario crear un grupo de
+ elementos como se vio en 
+\begin_inset LatexCommand \ref{sub:addGroup()-:-Armar}
+
+\end_inset 
+
+
+\newline 
+
+\layout Standard
+
+Ejemplo 
+\emph on 
+checkbox
+\emph default 
+:
+\layout LyX-Code
+
+$grupo = array(); 
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op1', 'Pelele');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op2', 'Tololo');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op3', 'Pitiribí');
+\layout LyX-Code
+
+$form->addGroup($grupo, 'opciones', 'Opciones', ' ', true); 
+\layout Standard
+
+Ejemplo 
+\emph on 
+radio button:
+\layout LyX-Code
+
+$grupo = array();
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pelele','','v1');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Tololo','', 'v2');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pitiribí','',
+ 'v3');
+\layout LyX-Code
+
+$form->addGroup($grupo, 'opciones2', 'Opciones 2', ' ', true); 
+\layout Standard
+
+En el caso de los Radio Button, el 4to.
+ parámetro es una etiqueta que se visualiza a la dereche del círculo de
+ opción, de todas formas su uso es poco común.
+\layout Subsubsection
+
+Botones de Formulario (button)
+\begin_inset LatexCommand \label{sub:Botones-de-Formulario}
+
+\end_inset 
+
+
+\layout Standard
+
+Para crear los botones de un formulario, recomendamos usar un grupo como
+ se vió en el ejemplo de la casilla de verificación en 
+\begin_inset LatexCommand \ref{sub:Casilla-de-Verificación}
+
+\end_inset 
+
+.
+ Pero en este caso el grupo lo formarán botones.
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$btn_aceptar =& HTML_QuickForm::createElement('submit', 'aceptar', 'Grabar');
+\layout LyX-Code
+
+$btn_cancelar =& HTML_QuickForm::createElement('reset', 'cancelar', 'Limpiar');
+\layout LyX-Code
+
+$grupo = array(); $grupo[] =& $btn_aceptar; $grupo[] =& $btn_cancelar;
+\layout LyX-Code
+
+$form->addGroup($grupo, 'botones'); 
+\layout Subsection
+
+Reglas de Validación
+\layout Standard
+
+Para poder imponer reglas en nuestro formulario, es necesario explicitarlos
+ en el programa.
+ Existen reglas para distintos elementos del formulario.
+ El MEcon Quick Form cuenta con un set de reglas registradas pero se le
+ pueden agregar mas.
+\layout LyX-Code
+
+$var->addRule(<nombre_elemento>, <texto>, <tipo_regla>); 
+\layout Standard
+
+Los parámetros tienen el siguiente significado.
+\layout Itemize
+
+<nombre_elemento> : Nombre del elemento del formulario (propiedad 
+\emph on 
+name
+\emph default 
+) al cual se le aplicará la regla.
+\layout Itemize
+
+<texto> : Texto que se visualizará en el caso que NO se cumpla con la regla.
+\layout Itemize
+
+<tipo_regla> : Tipo de la regla a aplicar.
+\layout Subsection
+
+Ejemplos de Tipos de reglas
+\layout Standard
+
+A continuación se verán los ejemplos más comunes.
+ Dependiendo del tipo de regla, se necesita un parámetro adicional
+\layout Subsubsection
+
+"required" : Obligatorio
+\begin_inset LatexCommand \label{sub:"required"-:-Obligatorio}
+
+\end_inset 
+
+
+\layout Standard
+
+Obliga que el usuario complete ese campo.
+ Se visualiza al lado del nombre un asterisco indicando que es obligatorio.
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'El campo nombre es obligatorio', 'required');
+\layout Subsubsection
+
+"maxlength" : Tamaño Máximo.
+\layout Standard
+
+Determina el tamaño máximo del campo, se le comunica al usuario el tamaño
+ máximo permitido.
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'El tamaño debe ser a lo sumo de 20', 'maxlengt
+h', '20'); 
+\layout Subsubsection
+
+"minlength" : Tamaño Mínimo.
+\layout Standard
+
+Determina el tamaño mínimo del campo, se le comunica al usuario el tamaño
+ mínimo permitido.
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'El tamaño debe ser por lo menos de 5',
+ 'minlength', '5');
+\layout Subsubsection
+
+"fecha" : Fecha Válida
+\layout Standard
+
+Determina si la fecha es válida, ejemplo: (31 de febrero).
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$form->addRule('fecha_inicial', 'La fecha no es válida', 'fecha'); 
+\layout Subsubsection
+
+"rangelength" : Tamaño dentro de un Rango FALTA
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsubsection
+
+"regex" : Validar con expresion regular
+\layout Standard
+
+Obliga que el campo cumpla con la expresión regular estipulada.
+\layout Standard
+
+Ejemplo:
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'No cumple, debe contener el texto rodolfo',
+ 'regex', '/rodolfo/'); 
+\layout Subsubsection
+
+"email" : Valida que sea Email
+\layout Standard
+
+Valida que el texto ingresado sea sintácticamente correcto.
+ Sin embargo puede estar vacío, se puede combinar con 
+\emph on 
+required 
+\begin_inset LatexCommand \ref{sub:"required"-:-Obligatorio}
+
+\end_inset 
+
+
+\layout LyX-Code
+
+$form->addRule('txt_email', 'Error de sintaxis', 'email');
+\layout Subsubsection
+
+"emailorblank" :
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsubsection
+
+"lettersonly" : Todas letras
+\layout Standard
+
+Valida que el texto ingresado contenga solamente letras
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'Solo se permiten letras ', 'lettersonly');
+\layout Subsubsection
+
+"alphanumeric" : Todos letras y numeros
+\layout Standard
+
+Valida que el texto ingresado sea alfanumérico, acepta letros o números
+ o ambos.
+ No permite caracteres especiales como '?', '
+\backslash 
+', etc.
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'Solo se permiten letras y números', 'alphanume
+ric');
+\layout Subsubsection
+
+"numeric" :
+\layout Standard
+
+Valida que el texto ingresado contenga solamente números
+\layout LyX-Code
+
+* $form->addRule('nombre_sistema', 'Solo se permiten números', 'numeric');
+\layout Subsubsection
+
+"nopunctuation" :
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsubsection
+
+"nonzero" :
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsubsection
+
+"uploadedfile" :
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsubsection
+
+"maxfilesize" :
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsubsection
+
+"mimetype" :
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsubsection
+
+"filename" :
+\layout Itemize
+
+se solicita enviar ejemplo
+\layout Subsection
+
+Accionar del formulario
+\layout Standard
+
+Aqui se verá la forma de acceder al formulario cuando se han cumplido todas
+ las reglas de validación (haya o no).
+\layout LyX-Code
+
+Ejemplo:
+\newline 
+
+\layout LyX-Code
+
+// Se valida, freezea el formulario y pide confirmación.
+\layout LyX-Code
+
+if ($form->validate()) { 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+$tmp = $form->getSubmitValue('botones');
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+if (@$tmp['aceptar'] == 'Grabar') { 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+$form->freeze(); 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+$btn_aceptar->setValue('Confirmar'); 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+}
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+elseif (@$tmp['aceptar'] == 'Confirmar') { 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+echo 'Aca Meto el Proceso de grabacion, eliminacion, etc';
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+$var = "grabacion_exitosa.php"; 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+header('Location: '.$var); 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+} 
+\layout LyX-Code
+
+}
+\layout LyX-Code
+
+echo $form->toHtml(); 
+\layout Standard
+\noindent 
+Como se observa, primero solicita que se validen los datos del formulario,
+ luego hay que ver en que instancia se encuentra, si en confirmación o en
+ la posterior a la confirmación.
+ Si no cumple con ninguna de las opciones, dibuja el formulario.
+ Para ver en que instancia se encuentra, se solicita el valor del grupo
+ de botones creado en 
+\begin_inset LatexCommand \ref{sub:Botones-de-Formulario}
+
+\end_inset 
+
+.
+ Recomendamos ver los ejemplos 
+\begin_inset LatexCommand \ref{sec:Ejemplos-Completos}
+
+\end_inset 
+
+
+\layout Subsection
+
+Dibujar el formulario
+\layout Standard
+
+Este paso simplemente solicita que se dibuje el formulario bajo las condiciones
+ dadas en los pasos anteriores.
+\layout LyX-Code
+
+$form->toHtml(); 
+\layout Standard
+
+Si en vez de mostrar el formulario con los campos 
+\begin_inset Quotes eld
+\end_inset 
+
+editables
+\begin_inset Quotes erd
+\end_inset 
+
+, deseamos que los muestre como simple texto, se debe anteponer a 
+\emph on 
+$form->toHtml(); 
+\emph default 
+lo siguiente:
+\layout LyX-Code
+
+$form->freeze(); 
+\layout Standard
+
+Esto es útil cuando se desea por ejemplo mostrar los datos ingresados en
+ el formulario solicitando una confirmación, antes de trabajar con ellos.
+ Recomendamos ver los ejemplos 
+\begin_inset LatexCommand \ref{sec:Ejemplos-Completos}
+
+\end_inset 
+
+
+\layout Section
+
+Ejemplos Completos
+\begin_inset LatexCommand \label{sec:Ejemplos-Completos}
+
+\end_inset 
+
+
+\layout Subsection
+
+Archivo ejemplar estandar
+\layout LyX-Code
+
+A continuación se muestra un ejemplo sencillo pero que abarca todos los
+ temas vistos en este HOWTO
+\newline 
+
+\layout LyX-Code
+
+<HTML> <HEAD> 
+\layout LyX-Code
+
+<TITLE>Prueba de renderer</TITLE>
+\layout LyX-Code
+
+<LINK rel="stylesheet" href="/MECON/css/general_estilos.css" type="text/css"/>
+ </HEAD> <BODY> 
+\layout LyX-Code
+
+<?
+\layout LyX-Code
+
+require_once 'MECON/HTML/QuickForm.php';
+\layout LyX-Code
+
+//(nombre,metodo,accion,target) target _self _blank 
+\layout LyX-Code
+
+$form = new MECON_HTML_QuickForm('test','post','',''); 
+\newline 
+
+\layout LyX-Code
+
+//Agrega los elementos comunes a todas las opciones 
+\layout LyX-Code
+
+$form->addElement('header','cabecera', 'Título del formulario');
+\newline 
+
+\layout LyX-Code
+
+//Agregar un objeto estatico..
+ tipo estiqueta
+\layout LyX-Code
+
+$form->addElement ('static' , 'responsable' , 'Responsable' , 'hola'); 
+\newline 
+
+\layout LyX-Code
+
+// Agregar un objeto oculto (hidden) 
+\layout LyX-Code
+
+$form->addElement ('hidden' , 'id_cliente' , '54'); 
+\newline 
+
+\layout LyX-Code
+
+$form->addElement('text', 'nombre_sistema','Nombre', array('size' => '30',
+ 'maxlength' => '30')); 
+\newline 
+
+\layout LyX-Code
+
+$form->addElement('textarea', 'desc_sistema', 'Descripción', array('rows'
+ => '2','cols'=>'50'));
+\newline 
+
+\layout LyX-Code
+
+$form->addElement('mdate', 'fecha', 'Fecha Implementación'); 
+\newline 
+
+\layout LyX-Code
+
+// Agrego un grupo de prueba separado por <BR>s.
+\layout LyX-Code
+
+$grupo = array();
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('mdate', 'desde', 'Desde'); 
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('mdate', 'hasta', 'Hasta');
+\layout LyX-Code
+
+$form->addGroup($grupo, 'fecha_group', 'Intervalo', '<BR>', true);
+\newline 
+
+\layout LyX-Code
+
+// Agregar 2 objetos select a partir de un array 
+\layout LyX-Code
+
+$arr = array("clave1" => "valor1", "clave2" => "valor2", "clave3" => "valor3",
+ "clave4" => "valor4", "clave5" => "valor5", "clave6" => "valor6"); 
+\layout LyX-Code
+
+$form->addElement ('select' , 'vector1' , 'Permisos' ,$arr , array('size'
+ => sizeof($arr), 'multiple' => 'multiple'));
+\layout LyX-Code
+
+$form->addElement ('select' , 'vector2' , 'Permisos' ,$arr , array('size'
+ => '1'));
+\newline 
+
+\layout LyX-Code
+
+// Agrega otro grupo de prueba, separado por un espacio.
+\layout LyX-Code
+
+$grupo = array(); 
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op1', 'Pelele');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op2', 'Tololo');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('checkbox', 'op3', 'Pitiribí');
+\layout LyX-Code
+
+$form->addGroup($grupo, 'opciones', 'Opciones', ' ', true);
+\newline 
+
+\layout LyX-Code
+
+// Agrega otro grupo de prueba, separado por un espacio.
+\layout LyX-Code
+
+$grupo = array(); 
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pelele','','v1');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Tololo','', 'v2');
+\layout LyX-Code
+
+$grupo[] =& HTML_QuickForm::createElement('radio', 'op4', 'Pitiribí','',
+ 'v3');
+\layout LyX-Code
+
+$form->addGroup($grupo, 'opciones2', 'Opciones 2', ' ', true);
+\newline 
+
+\layout LyX-Code
+
+// Agrega un grupo especial de botones.
+\layout LyX-Code
+
+$btn_aceptar =& HTML_QuickForm::createElement('submit', 'aceptar', 'Grabar');
+\layout LyX-Code
+
+$btn_cancelar =& HTML_QuickForm::createElement('reset', 'cancelar', 'Limpiar');
+\layout LyX-Code
+
+$grupo = array();
+\layout LyX-Code
+
+$grupo[] =& $btn_aceptar; 
+\layout LyX-Code
+
+$grupo[] =& $btn_cancelar; 
+\layout LyX-Code
+
+$form->addGroup($grupo, 'botones');
+\newline 
+
+\layout LyX-Code
+
+// Agrega las reglas de validacion 
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'El campo nombre es obligatorio', 'required');
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'El tamaño máximo es 10', 'maxlength',
+ '10');
+\layout LyX-Code
+
+$form->addRule('nombre_sistema', 'El campo debe ser alfanumérico', 'alphanumeric
+');
+\layout LyX-Code
+
+$form->addRule('desc_sistema', 'El campo descripcion es obligatorio', 'required'
+);
+\layout LyX-Code
+
+$form->addRule('contacto', 'El campo contacto es obligatorio', 'required');
+\layout LyX-Code
+
+$form->addRule('fecha', 'La fecha no es válida', 'fecha'); 
+\layout LyX-Code
+
+$form->addRule('fecha', 'El campo fecha es obligatorio', 'required', '');
+\layout LyX-Code
+
+$form->addRule('desde', 'La fecha no es válida', 'fecha'); 
+\layout LyX-Code
+
+$form->addRule('hasta', 'La fecha no es válida', 'fecha');
+\newline 
+
+\layout LyX-Code
+
+// Se valida, freezea el formulario y pide confirmación.
+\layout LyX-Code
+
+if ($form->validate()) { 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+$tmp = $form->getSubmitValue('botones'); 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+if (@$tmp['aceptar'] == 'Grabar') { 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+$form->freeze(); 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+$btn_aceptar->setValue('Confirmar'); 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+} elseif (@$tmp['aceptar'] == 'Confirmar') { 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+echo 'Aca Meto el Proceso de grabacion, eliminacion, etc'; 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+$var = "grabacion_exitosa.php";
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+\SpecialChar ~
+header('Location: '.$var); 
+\layout LyX-Code
+
+\SpecialChar ~
+\SpecialChar ~
+}
+\layout LyX-Code
+
+}
+\layout LyX-Code
+
+echo $form->toHtml();
+\layout LyX-Code
+
+?> 
+\newline 
+
+\layout LyX-Code
+
+</BODY> 
+\layout LyX-Code
+
+</HTML>
+\the_end