Otras formas de selectores

Preweb-Helper también maneja otros tipos de selectores que no son fruto de relaciones con otros módulos. Generalmente hablamos en estos casos de enums o de selects armados desde código.

Enums


Podemos armar selects de elementos fijos utilizando el tipo de datos enum que nos provee MySql.

CREATE TABLE mco_cosa (
    id bigint(20) NOT NULL auto_increment,
    campo1 enum('elemento 1','elemento 2','elemento 3') character set utf8 collate utf8_bin default NULL,
    orden int(10) default NULL COMMENT 'type:=hidden',
    PRIMARY KEY (`id`)
  )
Esto se vería de esta manera en el formulario:
Enums en formularios
El valor que genera, tal como el tipo de dato enum especifica será uno de los valores a elegir en la definición.
Está claro que solo sirve para datos que solo pueden estar dentro de un rango fijo y discreto de valores.
Algunos ejemplos podrian ser:
sexo enum('M','F') character set utf8 collate utf8_bin default NULL, //Usuarios

...
clase enum('A','B','C','D','E','F','G','H','I') character set utf8 collate utf8_bin default NULL, //Un curso de una escuela

...
cant_estrellas enum('1','2','3','4','5') character set utf8 collate utf8_bin default NULL,  //Un hotel

Selectores creados desde Data

Si deseamos que HelperView cree un selector no relacionado con ninguna tabla, necesitamos transformar Value en un arreglo, en este ejemplo haremos que muestre un selector de tipo de usuario

$data = $modelo->getData();

$aux = $data["tipo_usuario"]["Value"];

$data
["tipo_usuario"]["Value"][] = array( "id" => 1, "show" => "Manager de Proyecto", "selected" => ($aux == 1) );
$data["tipo_usuario"]["Value"][] = array( "id" => 2, "show" => "Desarrollador", "selected" => ($aux == 2) );
$data["tipo_usuario"]["Value"][] = array( "id" => 3, "show" => "Tester", "selected" => ($aux == 3) );

$vista->createForm($data);

El código anterior, generará un selector para elegir el nivel de usuario.

Para interpretar esos datos y mostrarlos podriamos tener un código similar al siguiente:


if( $data["tipo_usuario"]["Value"] == 1 )
   $data["tipo_usuario"]["Value"] = "Manager de Proyecto";

if( $data["tipo_usuario"]["Value"] == 2 )
   $data["tipo_usuario"]["Value"] = "Desarrollador";

if( $data["tipo_usuario"]["Value"] == 3 )
   $data["tipo_usuario"]["Value"] = "Tester";

$data["tipo_usuario"]["Comment"]["noEditable"] = 1;

$vista->createForm($data);

Obviamente los textos como "Desarrollador" o "Tester" pueden ser cambiados por etiquetas del tipo [{123|Desarrollador}], siempre y cuando, obviamente, esten en el template al menos como comentario para ser parseadas.