Cómo implementar un formulario

Formulario Prontus (prontus_form.cgi) es una aplicación cgi que permite procesar el contenido de un formulario publicado a través de un artículo Prontus.

Publicado: Viernes 28 de Septiembre de 2018 por David García
Última modificación: Miércoles 3 de Abril de 2019

Para implementar Formularios en Prontus es necesario crear previamente un FID tipo "Formulario" (ver Cómo crear FID ).

Por defecto el wizard_prontus creará un fid_form.html el cual podrás utilizar de base para tu fid tipo formulario y está ubicado  en el siguiente directorio: 

/[nombre del sitio]/cpan/fid/fid_form.html  

Crear FID y macros

En caso de que no exista o desees simplemente crear uno nuevo, con caracteristicas adicionales puedes crear un nuevo fid en [/nombre del sitio]/cpan/fid con el siguente formato fid_[nombre del formulario].html donde puedes darle el nombre que deseas. 

Ejemplo:

fid_mi_formulario.html

En este ejemplo destacamos la importancia de la macro reservada _prontus_form_mensajes.html la cual creará un panel donde podrás configurar los mensajes que se desplegarán al momento de enviar información por medio de un formulario en el sitio:

<!DOCTYPE html>
<html lang="es">
<head>
%%MACRO(_head.html)%%
<script>
// Espacio para personalizar o agregar JS custom al cargar o guardar datos
$(document).ready(function () {
%%MACRO(comun_head.html)%% $('#_mainFidForm').submit(function() {
});
});
</script>
</head>
%%MACRO(_open_body.html)%%
%%MENU%%
%%ITEM(Cabecera, body1)%%%%/ITEM%%
%%ITEM(Mensajes, body2)%%%%/ITEM%%
%%ITEM(Datos, body3)%%%%/ITEM%%
%%/MENU%%
<div class="main-fid" id="fid">
%%MACRO(_titulo_principal.html)%%
<div class="content">
%%MACRO(_publicacion_directa.html)%%
<div class="panel-group">
%%PANEL(Cabecera, body1, form_cabecera.html)%%
%%PANEL(Mensajes, body2, _prontus_form_mensajes.html)%%
%%PANEL(Datos, body3, form_datos.html)%%
</div>
</div>
</div>
%%MACRO(_close_body.html)%%
</html>

además también son importantes las macros (los cuales deben estar en /[nombre del prontus]/cpan/fid/macros/). 

Ejemplo:

form_cabecera.html

<div class="form-group">
<label for="txt_titular_largo">Titular Largo</label>
<textarea name="txt_titular_largo" id="txt_titular_largo" >%%txt_titular_largo%%</textarea>
</div> %%MACRO(comun_titular_especial.html)%% <div class="form-group">
<label for="_txt_bajada">Introducción</label>
<textarea name="_txt_bajada" id="_txt_bajada">%%_txt_bajada%%</textarea>
</div>
<div class="form-group">
<label>Introducción Corta</label>
<input type="text" value="%%bajada_corta%%" size="5" name="bajada_corta">
</div> %%MACRO(comun_coment.html)%%
%%_TAXONOMIA%%
%%MACRO(_tax_manual.html)%%
%%MACRO(_tags.html)%% %%MACRO(_prontus_form_cabecera.html)%%

En el siguiente ejemplo de parcial podrás apreciar que se definen  campos tales como "teléfono", "nombres", entre otros. Sin embargo puedes configurar la cantidad de campos que desees con los nombres que tu elijas.

form_datos.html

<div>
<div>
<h4>Identificación del Contacto</h4>
</div>
</div>
<div>
<div>Nombre Contacto</div>
<div>
<input type="text" name="nombre_contacto" size="60" value="%%nombre_contacto%%">
</div>
</div>
<div>
<div>Teléfono Contacto</div>
<div>
<input type="text" name="telefono_contacto" size="60" value="%%telefono_contacto%%">
</div>
</div>
<div>
<div>Email Contacto</div>
<div>
<input type="text" name="email_contacto" size="60" value="%%email_contacto%%">
</div>
</div>
<div>
<div>
<h4>Identificación del Remitente</h4>
</div>
</div> <div>
<div>
<a href="#"id="seleccionarTodosObligatorios">Todos</a>
<a href="#" id="seleccionarNingunoObligatorios">Ninguno</a>
</div>
</div>
<div>
<div>Nombre</div>
<div>
<input type="checkbox" id="CHK_form_required_nombre" name="CHK_form_required_nombre" value="si">
<label for="CHK_form_required_nombre">Obligatorio</label>
</div>
</div>
<div>
<div>Apellido Paterno</div>
<div>
<input type="checkbox" name="CHK_form_required_apellido_paterno" id="CHK_form_required_apellido_paterno"
value="si">
<label for="CHK_form_required_apellido_paterno">Obligatorio</label>
</div>
</div>
<div>
<div>Apellido Materno</div>
<div>
<input type="checkbox" name="CHK_form_required_apellido_materno" id="CHK_form_required_apellido_materno"
value="si">
<label for="CHK_form_required_apellido_materno">Obligatorio</label>
</div>
</div>
<div>
<div>Teléfono</div>
<div>
<input type="checkbox" id="CHK_form_required_telefono" name="CHK_form_required_telefono" value="si">
<label for="CHK_form_required_telefono">Obligatorio</label>
</div>
</div>
<div>
<div>Email</div>
<div>
<input type="checkbox" id="CHK_form_required_email" name="CHK_form_required_email" value="si">
<label for="CHK_form_required_email">Obligatorio</label>
</div>
</div>
<div class="row rowfix">
<div>Consulta</div>
<div>
<input type="checkbox" id="CHK_form_required_consulta" name="CHK_form_required_consulta" value="si">
<label for="CHK_form_required_consulta">Obligatorio</label>
</div>
</div>
Crear la plantilla asociada a  fid_formulario.html

En este caso llamaremos a la plantilla "formulario.html" sin embargo puedes colocarle cualquier otro nombre, ya que  la asociación entre el FID y las plantillas se define en la configuración en el administrador del sitio:

<!doctype html>
<html>
<head>
<title>%%_titular%% - Modelo Mínimo 12</title>
<meta charset="utf-8">
<script src="/prontus/front/js-local/validator.min.js"></script>
</head>
<body> %%if(txt_titular_largo)%%
%%txt_titular_largo%%
%%/if%% %%if(txt_titular_portada)%%
%%txt_titular_portada%%
%%/if%% %%if(_txt_bajada)%%
%%_txt_bajada%%
%%/if%% %%if(bajada_corta)%%
<p>%%bajada_corta%%</p>
%%/if%% %%if(invitacion_coment)%%
<p>%%invitacion_coment%%</p>
%%/if%% <p>Los campos (*) son obligatorios</p>
%%if(nombre_contacto)%%
<p>%%nombre_contacto%% %%if(telefono_contacto)%%- %%telefono_contacto%%%%/if%% %%if(email_contacto)%%- %%email_contacto%%%%/if%%</p>
%%/if%%
<form id="formProntusConsulta" action="/cgi-bin/prontus_form.cgi" method="post" enctype="multipart/form-data" class="form-horizontal" role="form">
<input type="hidden" name="_TS" value="%%_TS%%" />
<input type="hidden" name="_FILE" value="%%_FILE%%" />
<input type="hidden" name="_PRONTUS_ID" value="%%_PRONTUS_ID%%" />
<div>
<div>
<label for="nombres">Nombres
%%if(CHK_form_required_nombre)%%
<span>*</span>:
%%/if%%
</label>
<div>
<input type="text" class="form-control" id="nombre" name="nombre" placeholder="Nombres">
</div>
</div>
</div>
<!--row-->
<div>
<div>
<label for="apellido_paterno">Apellido Paterno
%%if(CHK_form_required_apellido_paterno)%%
<span>*</span>:
%%/if%%
</label>
<div >
<input type="text" class="form-control" id="apellido_paterno" name="apellido_paterno" placeholder="Apellido Paterno">
</div>
</div>
</div>
<!--row-->
<div>
<div>
<label for="apellido_materno">Apellido Materno
%%if(CHK_form_required_apellido_materno)%%
<span>*</span>:
%%/if%%
</label>
<div>
<input type="text" class="form-control" id="apellido_materno" name="apellido_materno" placeholder="Apellido materno">
</div>
</div>
</div>
<!--row-->
<div>
<div>
<label for="telefono">Teléfono
%%if(CHK_form_required_telefono)%%
<span>*</span>:
%%/if%%
</label>
<div>
<input type="text" id="telefono" name="telefono" placeholder="9 876 543 21">
</div>
</div>
</div>
<!--row-->
<div class="row">
<div class="form-group">
<label for="email">Email
%%if(CHK_form_required_email)%%
<span>*</span>:
%%/if%%
</label>
<div>
<input type="text" id="email" name="email" placeholder="Email">
</div>
</div>
</div>
<!--row-->
<div class="row">
<div class="form-group">
<label for="consulta" >Consulta
%%if(CHK_form_required_consulta)%%
<span>*</span>:
%%/if%%
</label>
<div>
<textarea class="form-control" rows="5" id="consulta" name="consulta"placeholder="Escríbanos su consulta" style="min-height: 100px;"></textarea>
</div>
</div>
</div>
<!--row-->
<div>
<div class="form-group">
<label for="consulta">Archivo
<span>*</span>:
</label>
<div>
<input type="file" name="archivo" class="form-control">
</div>
</div>
</div>
<div>
<div class="form-group">
<div>
<label for="telefono">Código de validación
%%if(CHK_form_captcha_enable)%%
<span>*</span>:
%%/if%%
</label>
</div>
<div>
<img src="/cgi-bin/prontus_captcha.cgi?_type=form" width="80" height="35" style="border:1px solid #bbbbbb;" alt=""/></td>
</div>
<div>
<input type="text" name="_CAPTCHA_FORM" class="form-control" placeholder="Ingrese el código de validación"/>
</div>
</div>
</div>
<!--row--> <!--fin informacion y postulaciones-->
<div>
<div>
<button type="submit" href="#" class="wp-boton-volver" onclick="enviaFormConsulta();">Enviar Formulario</button>
<a class="boton" href="#">Volver</a>
</div>
</div>
</form>
<div class="separa"></div>
<script>
var validatorConsulta = new Validador('formProntusConsulta','one','#FDF8C1');
%%IF(CHK_form_required_nombre)%%
validatorConsulta.addconstraint('nombre','obligatorio','','El campo Nombres es obligatorio.');
validatorConsulta.addconstraint('nombre','texto','','El campo Nombre contiene caracteres no permitidos.');
%%/IF%% %%IF(CHK_form_required_apellido_paterno)%%
validatorConsulta.addconstraint('apellido_paterno','obligatorio','','El campo Apellido Paterno es obligatorio.');
validatorConsulta.addconstraint('apellido_paterno','texto','','El campo Apellido Paterno contiene caracteres no permitidos.');
%%/IF%% %%IF(CHK_form_required_apellido_materno)%%
validatorConsulta.addconstraint('apellido_materno','obligatorio','','El campo Apellido Materno es obligatorio.');
validatorConsulta.addconstraint('apellido_materno','texto','','El campo Apellido Materno contiene caracteres no permitidos.');
%%/IF%% %%IF(CHK_form_required_telefono)%%
validatorConsulta.addconstraint('telefono','obligatorio','','El campo Teléfono es obligatorio.');
validatorConsulta.addconstraint('telefono','regex',new RegExp(/^[0-9\-\(\) ]+$/),'El campo Teléfono contiene caracteres no permitidos.');
%%/IF%%
%%IF(CHK_form_required_email)%%
validatorConsulta.addconstraint('email','obligatorio','','El campo correo electrónico es obligatorio.');
validatorConsulta.addconstraint('email','email','','El campo correo electrónico no es válido.');
%%/IF%%
%%IF(CHK_form_required_consulta)%%
validatorConsulta.addconstraint('consulta','obligatorio','','El campo consulta es obligatorio.');
validatorConsulta.addconstraint('consulta','texto','','El campo consulta contiene caracteres no permitidos.');
%%/IF%% %%IF(CHK_form_captcha_enable)%%
validatorConsulta.addconstraint('_CAPTCHA_FORM','obligatorio','','El campo Código de validación es obligatorio.');
%%/IF%% function enviaFormConsulta() {
var formObject = document.getElementById('formProntusConsulta');
if (validatorConsulta.validar()) {
if (confirm('¿Está seguro que desea enviar los datos?')) {
formObject.submit();
};
};
return false;
};
</script>
</body>
</html>

3. - Luego que tengas creados los FID con sus respectivas macros, debes Guardarlos en la configuración del sitio de forma de que puedas hacer artículos del tipo "Formulario".

Configuración

Puedes configurar el Formulario Prontus mediante variables Prontus globales, a las que se agregan otras de uso específico para los formularios.

Variables globales

  • _TS: contiene el Timestamp de creación del artículo Prontus. Utilizada para ubicar el archivo XML con los datos ocultos del formulario.
  • _FILE: contiene el Path completo al artículo Prontus. Utilizado para reconocer la extensión del formulario. Esta extensión debe ser la misma en las plantillas de respuesta.
  • _PRONTUS_ID: contiene el Identificador de la instancia de Prontus.
Variables específicas de formularios

Para que el Formulario Prontus funcione correctamente, existe una serie de variables Prontus que debes definir en el FID. Estas variables serán almacenadas en el archivo XML correspondiente, siendo leídas desde él por la cgi prontus_form.

form_admin

E-mails de destino del formulario, separadas por comas.

Ejemplo: acorrea@midominio.com, pfaundez@web.com

Si como parte del formulario se envía un dato con el nombre _admin, entonces ese dato sustituirá a form_admin. Para evitar que direcciones de correo seandetectadas por sniffers, puede usarse el carácter # como sustituto de la arroba (@).

Ejemplo: gflores#sitio.com

El uso práctico de esta mecánica es publicar tópicos, temas o áreas distintos usando un combo-box (control select) o alternativas (control radio).

form_remitente

E-mail del remitente. Se puede indicar un remitente fijo en el FID con esta variable.

Al marcar el check "chk_form_force_from" se deja con preferencia el campo "form_from" como remitente.

form_from

E-mail del remitente. Esta variable es sustituida por el dato email, si es que existe en el formulario.

Si el dato email no existe en el formulario, entonces no se enviará un mail de autorrespuesta.

form_subject

 

Subject (asunto) del mensaje que llegará al administrador. Puede contener datos del formulario, para lo cual deben insertarse marcas de la forma %nombre% (Para más información sobre el parseo de marcas, revisa este artículo.).

Ejemplo:

Formulario de Contacto Prontus - %tipo%

form_subject_auto

Subject (asunto) del mensaje de autorrespuesta que se envía al remitente. Puede contener datos del formulario, para lo cual deben insertarse marcas de la forma %nombre%.

 

form_msg_auto

Mensaje de autorrespuesta que se envía al remitente. Puede contener datos del formulario, para lo cual deben insertarse marcas de la forma %nombre%.

Ejemplo:

Estimado(a) %nombre%,

Gracias por contestar nuestra encuesta.

Pronto nos contactaremos con Ud.

Visite nuestro sitio web en www.misitio.com

Atte.,

El Webmaster

form_msg_exito

Mensaje de éxito del sistema, en formato HTML. Puede contener datos del formulario, para lo cual debes insertar marcas de la forma %nombre%.

Ejemplo:

Estimado(a) %nombre%,< br >

Gracias por contestar nuestra encuesta.< br >

Pronto nos contactaremos con Ud.< br >

Visite nuestro sitio web en < a href="http://www.misitio.com" >www.misitio.com< /a > < br >

 

Atte.,< br >

El Webmaster< br >

form_msg_error

Mensaje de error del sistema, en formato HTML. Puede contener datos del formulario, para lo cual deben insertarse marcas de la forma %nombre%.

La marca %err% es sustituida por el mensaje de error del sistema.

Ejemplo:

Estimado(a) %nombre%,< br >
Ha cometido el siguiente error:< br >< br >
%err%< br >< br >
Por favor, vuelva < a href='javascript:history.back()' >atrás< /a > y corríjalo.

CHK_form_required_[nombre]

Indica que el dato [nombre] es obligatorio en el formulario.

CHK_form_backup_datos

Si existe, realiza una copia de los datos recibidos dentro del directorio de respaldo, incluyendo los archivos adjuntos.

Datos almacenados por el formulario

Los datos ingresados en el formulario (artículo Prontus publicado), incluyendo eventuales archivos adjuntos, son enviados por e-mail al administrador y eventualmente respaldados (todos) de acuerdo a la existencia de la variable CHK_form_backup_datos. Los datos ingresados en el formulario son enviados y almacenados en mismo orden en que aparecen en él. Los archivos adjuntos se mostrarán como enlaces en el mail al administrador, y se adjuntará el primero.

Dentro del correo electrónico al administrador, éstos aparecerán con su nombre, un signo igual (=) y su valor. Por ejemplo:

Nombre = Alejandro Pérez
Telefono = 34667467
Pregunta = ¿Pueden informarme dónde está la home page?

Recibido el 31/02/2007 a las 13:54:23 desde el IP 200.34.212.17

Atentamente,
Prontus CMS

Nótese que al final el Formulario Prontus registra la fecha, la hora y el número IP desde donde fueron recibidos los datos.

En el archivo de respaldo (backup.csv), los datos serán escritos en un archivo CSV (compatible con Excel), donde cada columna contendrá un dato en particular. La primera fila corresponderá a los nombres de los datos almacenados.

Los nombres de los archivos adjuntos son alterados de manera que no se repitan dentro del directorio del formulario.

Validación de datos

El formulario Prontus valida automáticamente los datos cuyos atributos name comiencen con:

  • email o e-mail (se asume que es una dirección de correo electrónico)
  • rut (se asume que es un RUT)
  • telefono, phone, fax, celular o cellphone (se asume que es un número telefónico)

Los datos que comienzan con un underscore (_) no son enviados ni almacenados.

Es decir, el siguiente código hará que Prontus procese el dato enviado como rut:

<input type="text" name="rutCliente" value="" id="rutCliente">

Datos reservados

Con el fin de relacionar el formulario con su correspondiente artículo Prontus, dentro de la plantilla de formulario debes incluir los siguientes datos:

_TS

Timestamp de Prontus. Utilizada para ubicar el archivo XML con los datos ocultos del formulario.

Ejemplo:

<input type="hidden" name="_TS" value="%%_TS%%">

_FILE

Path completo al artículo Prontus. Utilizado para reconocer la extensión del formulario. Esta extensión debe ser la misma en las plantillas de respuesta.

Ejemplo:

<input type="hidden" name="_FILE" value="%%_FILE%%">

_PRONTUS_ID

Identificador de la instancia de Prontus.

Ejemplo:

<input type="hidden" name="_PRONTUS_ID" value="%%_PRONTUS_ID%%">

_pag_exito

Plantilla de éxito del formulario (sólo el nombre del archivo, sin extensión. La extensión se deduce del nombre del archivo que contiene el formulario).

Si no se especifica, entonces se usa:

/[prontus_id]/plantillas/extra/form/pags/exito.[ext]

_pag_error

Plantilla de error del sistema (sólo el nombre del archivo, sin extensión. La extensión se deduce del nombre del archivo que contiene el formulario).

Si no se especifica, entonces se usa:

/[prontus_id]/plantillas/extra/form/pags/error.[ext]

Respaldo de datos

El respaldo de los datos recibidos se encuentra en:

/[prontus_id]/cpan/procs/form/[ts]

El archivo de respaldo se llama backup.csv. A los archivos adjuntos se les antepone un número aleatorio para evitar que sean sobreescritos.

Archivos temporales

Los archivos temporales utilizados para entregar la respuesta al visitante se encuentran en:

/[prontus_id]/site/cache/form/pags

y

/[prontus_id]/site/cache/form/pags-[vvv]

Donde "vvv" corresponde al nombre de cada vista.

Servidor SMTP

El Formulario Prontus utiliza el servidor SMTP indicado en el archivo de configuración [nombre del sitio]-var.cfg ubicado en /[nombre del sitio]/cpan/ para realizar los envíos (parámetro SERVER_SMTP).

Plantillas de Error y Éxito

Dado que el Formulario es también un tipo de FID, su apariencia se modifica por medio de la plantilla que hayas configurado (Ver Plantillas Artículos)

Sin embargo, una vez tengas implementado tu formulario en Prontus puedes configurar varias plantillas para los estados de envío (Éxito y  Error).

Debes crear las plantillas para multivistas en los directorios

/[prontus_id]/plantillas/extra/form/pags-[vvv]

Donde "vvv" corresponde al nombre de cada vista.

Plantilla de Éxito

Si todo sale bien y los datos se envían de forma exitosa, querrás hacerlo saber al usuario por medio de un mensaje que le indique que su consulta llegó a buen destino. 

Para ello deberás buscar en el directorio /[nombre del prontus]/plantillas/extra/form/pags/ y configurar la siguiente plantilla: exito.html

En el código de la plantilla podrás apreciar y destacar la marca:

%%MSG%%

La cual despliega el mensaje que configuraste desde el administrador  del sitio al momento de crear el artículo desde el FID. 

Ademas del mensaje de éxito configurado en el administrador tambien puedes configurar otros mensajes para diferentes iteraciones y validaciones en el formulario, por ejemplo, un mesaje en caso de los datos sean erroneos, un mensaje en caso de que el servidor no responda correctamente, un mensaje para reescribir un label entre otros: 

<!-- MSG out_of_service = Sistema fuera de servicio. Intente otra vez más tarde ... -->
<!-- MSG required_data = Este dato es obligatorio: -->
<!-- MSG wrong_data = Este dato es incorrecto: -->
<!-- MSG nombres = Nombre -->
<!-- MSG apellidos = Apellidos -->
<!-- MSG rut = RUT -->
<!-- MSG email = E-Mail -->
<!-- MSG direccion = Dirección-->
<!-- MSG telefono = Teléfono -->
<!-- MSG tipo_de_consulta = Tipo de Consulta -->
<!-- MSG comentarios = Comentarios -->
<!-- MSG fecha = Fecha -->
<!-- MSG lugar = Lugar -->
<!-- MSG contacto = Contacto -->
<!-- MSG descripcion = Descripción -->
<!-- MSG inscripcion = Inscripción -->
<!-- MSG wrong_captcha = El código de validación es incorrecto -->

La apariencia del resto de la página dependerá del diseño que tengas definido para el sitio, el cual podrás modificar por medio de los css y js. 

Ejemplo: 

<!DOCTYPE html>
<html lang="es">
<head>
<title>Prontus.cl - Formularios</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="ROBOTS" content="NOINDEX" />
<!-- MSG out_of_service = Sistema fuera de servicio. Intente otra vez más tarde ... -->
<!-- MSG required_data = Este dato es obligatorio: -->
<!-- MSG wrong_data = Este dato es incorrecto: -->
<!-- MSG nombres = Nombre -->
<!-- MSG apellidos = Apellidos -->
<!-- MSG rut = RUT -->
<!-- MSG email = E-Mail -->
<!-- MSG direccion = Dirección-->
<!-- MSG telefono = Teléfono -->
<!-- MSG tipo_de_consulta = Tipo de Consulta -->
<!-- MSG comentarios = Comentarios -->
<!-- MSG fecha = Fecha --> <!-- MSG lugar = Lugar -->
<!-- MSG contacto = Contacto -->
<!-- MSG descripcion = Descripción -->
<!-- MSG inscripcion = Inscripción -->
<!-- MSG wrong_captcha = El código de validación es incorrecto -->
</head> <body class="bodyport">
<section id="main" class="art-general">
<h2>Error al envíar mensaje.</h2>
<!-- Area superior-->
<p>%%MSG%%</p>
<div class="separa">
</div>
<p>
<a href="/"><span class="text-cerrar">[Volver]</span></a>
</p>
</section>
</body>
</html>
Plantilla de Error

En el caso de la plantilla de Error para los formularios, la estructura es similar a la de Éxito en cuanto a la marca %%MSG%%, que desplegará de igual forma el mensaje de error configurado en el administrador del sitio para el artículo formulario. 

<!DOCTYPE html>
<html lang="es">
<head>
<title>Prontus.cl - Formularios</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="ROBOTS" content="NOINDEX" />
<!-- MSG out_of_service = Sistema fuera de servicio. Intente otra vez más tarde ... -->
<!-- MSG required_data = Este dato es obligatorio: -->
<!-- MSG wrong_data = Este dato es incorrecto: -->
<!-- MSG nombres = Nombre -->
<!-- MSG apellidos = Apellidos -->
<!-- MSG rut = RUT -->
<!-- MSG email = E-Mail -->
<!-- MSG direccion = Dirección-->
<!-- MSG telefono = Teléfono -->
<!-- MSG tipo_de_consulta = Tipo de Consulta -->
<!-- MSG comentarios = Comentarios -->
<!-- MSG fecha = Fecha -->
<!-- MSG lugar = Lugar -->
<!-- MSG contacto = Contacto -->
<!-- MSG descripcion = Descripción -->
<!-- MSG inscripcion = Inscripción -->
<!-- MSG wrong_captcha = El código de validación es incorrecto -->
<link type="text/css" rel="stylesheet" href="/cms/css/global.css" />
<link type="text/css" rel="stylesheet" href="/cms/css/articulo.css" />
<?php include($_SERVER['DOCUMENT_ROOT']."/cms/js-local/_includedjavascripts.html");?>
</head> <body class="bodyport"> <section id="main" class="art-general">
<h2>Formularios</h2>
<!-- Area superior-->
<p>%%MSG%%</p>
<div class="separa"></div>
<p><a href="javascript:history.back();"><span class="text-cerrar">[Volver]</span></a></p>
</section>
</body>
</html>

Artículos Relacionados