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:

 

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:

<!-- BEGIN HelperLangTab -->
{lang}
<!-- END HelperLangTab -->

<!-- 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

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.