Mostrar Formularios
Aqui se verá como mostrar formularios desde la BD
Vista->createForm(data, [config])
Esta función parsea un formulario a partir de la informacion proveniente del modelo en data. Es la principal función de visualización del Helper, por eso debes estar familiarizado con ella.
Esta funcion necesita un template que cumpla las siguientes condiciones mínimas:
- Debe tener definido un bloque donde se parsearán los campos llamado: "HelperBlock".
- Dentro de "HelperBlock" debe estar definido el tag "{HelperLabel}" en donde se parseara el nombre del campo.
- Dentro de "HelperBlock" debe estar definido el tag "{HelperField}" en donde se parseara el valor del campo dependiendo del tipo de campo.
- Fuera de "HelperBlock" debe estar definido el tag "{HelperHidden}" en donde se parsearan los valores de tipo "hidden".
Este es un ejemplo de Template:
<form>
<!-- BEGIN HelperBlock -->
<div class="{HelperDataClass}">
{HelperLabel}<br />
{HelperField}<br />
</div>
<!-- END HelperBlock -->
{HelperHidden}
</form>
Ejemplo de PHP: // asi se crea un formulario para un nuevo elemento
$data = $modelo->getData(); //se obtiene la informacion de la BD
$vista->setTemplate("nuevo"); //se asigna un template que cumpla lo mencionado
$vista->createForm($data); //se genera el formulario
$vista->parseTemplate(); //se parsea y se muestra
Esta función, generará distintos tipos de formularios, dependiendo de los tipos de datos en la BD. Por ejemplo, si la fecha de nacimiento de un usuario está asentada en un tipo DATE, createForm() automáticamente pondrá un selector de fecha para esa entrada.
Existen muchas variantes para createForm(). Si se quiere hacer un módulo donde la información cambie por idiomas (como un módulo de contenidos), el Template debe cumplir más requerimientos:
- Debe tener definido el selector de idioma:
<!-- BEGIN HelperLangTab -->
{lang}
<!-- END HelperLangTab -->
- Debe tener definido el contenido para cada idioma:
<!-- BEGIN HelperLang -->
<div style="display:{HelperLangDisplay}" id="id_{idioma}">
{HelperLangDescription}
<!-- BEGIN HelperLangItem -->
<div class="{HelperDataClass}">
{HelperLabel}<br />
{HelperField}<br />
</div>
<!-- END HelperLangItem -->
</div>
<!-- END HelperLang -->
El bloque "HelperLangItem" tiene la misma forma que el bloque "HelperBlock", esto significa que los tags dentro de este bloque hacen lo mismo que el anterior, solo que habra uno por idioma habilitado.
Variaciones de config
- "dataClassVarName" especifica el nombre del tag donde se parsea la clase CSS de cada entrada, por defecto es "HelperDataClass".
- "formBlockName" especifica el nombre del bloque donde se parsea el formulario, por defecto es "HelperBlock".
- "formFieldVarName" especifica el nombre del tag donde se parsea cada entrada, por defecto es "HelperField".
- "formLabelVarName" especifica el nombre del tag donde se parsea el nombre de cada entrada, por defecto es "HelperLabel".
- "formHiddenVarName" especifica el nombre del tag donde se parsean las variables ocultas, por defecto es "HelperHidden".
- "langBlockName" especifica el nombre del bloque donde se parsean las entradas dependiente de idiomas, por defecto es "HelperLang".
- "langStart" especifica el primer código de idioma para la primer entrada, por cada entrada "langStart" avanza en 1. El valor por defecto es 8000.
- "langTabBlockName" especifica el nombre del bloque donde se parsean los selectores de idioma, por defecto es "HelperLangTab".
- "showId" especifica si se debe mostrar el valor de ID en el formulario, por defecto es false.
Vista->hideField(data, campo)
Esta función oculta el campo campo de data para que se oculte en el formulario y pase en el POST.
Por ejemplo editando la información de un usuario:
$data = $modelo->getData(); // obtener datos de la BD
$vista->hideField($data,'access_level'); //oculta el campo con los permisos de usuario
$vista->hideField($data,'phone_number'); //oculta el campo con el telefono
$vista->setTemplate("editar");
$vista->createForm($data);
$vista->parseTemplate();
Este ejemplo tiene un problema de seguridad en el campo "access_level", para evitar estos problemas debes utilizar excludeField()
Vista->excludeField(data, campo)
Esta función elimina el campo campo de data para que no salga en el formularia ni se pase en el POST.
$data = $modelo->getData(); // obtener datos de la BD
$vista->excludeField($data,'access_level'); //elimina el campo con los permisos de usuario
$vista->hideField($data,'phone_number'); //oculta el campo con el telefono
$vista->setTemplate("editar");
$vista->createForm($data);
$vista->parseTemplate();
El ejemplo sigue con un problema de seguridad, pero más leve, debe realizarse otro excludeField($data,'access_level') antes de insertarlo a la BD.