Formularios en Zend Framework (y IV)
Y es algo que finalmente se puede resolver de manera muy sencilla, y que vamos a ver ahora mismo ...
Bien, lo que debemos hacer es crear una variable pública, podríamos definirla privada y luego su correspondiente set and get, que nos devuelva un array con las distintas opciones en la clase Form_Libro, tal y como podemos ver a continuación:
class Form_Libro extends Zend_Form{
public $opciones;
public function __construct($options = null){
parent::__construct($options);
$this->setName('libro');
$id = new Zend_Form_Element_Hidden('id');
$autor = new Zend_Form_Element_Text('autor');
$autor->setLabel('Autor')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim');
$titulo = new Zend_Form_Element_Text('titulo');
$titulo->setLabel('Titulo')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim');
//Definimos las opciones y el valor de cada opción que tendrá nuestro select
$this->opciones = array ('0'=>'', '1'=>'terror', '2'=>'comedia', '3'=>'policiaca');
$this->addElements(array($id, $autor, $titulo));
}
}
Hemos definido una opción en blanco, como primera, pero perfectamente podríamos haber elegido cualquier otra o haber puesto el literal "selecciona una opción" de manera que llame la atención de quien rellena el formulario y seleccione una opción.
Para cada opción, se le dará posteriormente, como valor la posición en el array.
Una vez hecho esto, tenemos que capturarlo en el formulario, y construir el cuerpo del select. Para ello, editamos nuestro archivo anyadir.phtml que construye la vista de añadir un nuevo libro, y le añadimos el código necesario para construir el select, el cual, como veréis es muy poco, y se nos queda muy limpio.
<H1>Añadir nuevo libro</H1>
<div id = "errores"></div>
<form name = "libro" id = "libro" method = "post">
<fieldset>
<legend>Introduce los datos del libro</legend>
<label for = "Autor" class="required">* Autor: </label>
<input name = "autor" id = "autor" type = "text" />
<label for = "Titulo" class="required">* Título</label>
<input type = "text" name = "titulo" id = "titulo" />
<label for = "Estilo" class="required">* Estilo</label>
<select name = "estilo" id = "estilo">
<?php
$total = count($this->form->opciones);
for ($i = 0; $i < $total; $i++){
echo "<option value = " . $i . ">" . $this->form->opciones[$i] . "</option>"."\n";
echo "\t\t\t\t";
}
?>
</select>
<a href = "#" name = "añadir" id = "añadir" onClick = "javascript: sendForm();">Añadir</a>
</fieldset>
</form>
Esto hará que nuestro formulario ahora se pueda visualizar de la siguiente manera:

Si miramos el código fuente de nuestra página HTML, podemos ver código se ha creado correctamente nuestra página internamente.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "es" lang = "es"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <meta http-equiv="Cache-Control" content="no-cache" /> <title>A&ntilde;adir nuevo libro - Biblioteca</title> <script type="text/javascript" src="http://biblioteca.localhost:8080/js/anyadir-libro.js"></script> <link href="http://biblioteca.localhost:8080/css/biblioteca.css" media="screen" rel="stylesheet" type="text/css" /> </head> <body> <div id="content"> <h1></h1> <H1>Añadir nuevo libro</H1> <div id = "errores"></div> <form name = "libro" id = "libro" method = "post"> <fieldset> <legend>Introduce los datos del libro</legend> <label for = "Autor" class="required">* Autor: </label> <input name = "autor" id = "autor" type = "text" /> <label for = "Titulo" class="required">* Título</label> <input type = "text" name = "titulo" id = "titulo" /> <label for = "Estilo" class="required">* Estilo</label> <select name = "estilo" id = "estilo"> <option value = 0></option> <option value = 1>terror</option> <option value = 2>comedia</option> <option value = 3>policiaca</option> </select> <a href = "#" name = "añadir" id = "añadir" onClick = "javascript: sendForm();">Añadir</a> </fieldset> </form> </div> </body> </html>
Con esto, damos por finalizada nuestra adaptación de los formularios en Zend Framework, para que se ajuste a nuestras necesidades, además de evitar introducir código HTML o CSS en nuestro código de servidor.
¡¡¡Y esto es todo por el momento!!!
¡¡¡Cualquier comentario, mejora, o ayuda sobre este tema siempre será bienvenido!!!
[ad#Google Adsense]
Si te ha gustado este artículo, te puede interesar ...
Aún no hay trackbacks.
10 julio, 2010 - 08:43
Lo que sería estupendo es si le añades que el COMBO sea dinámico con BD, por el resto genial!
10 julio, 2010 - 12:58
Hola, tienes razón, pero la intención era ofrecer otra manera distinta de cómo hacer los formularios, tener mayor libertad a la hora de colocar los campos dónde y cómo queramos, así como no tener definidos los estilos en el código del servidor, y tenerlos todos en su css correspondiente.
Para hacer lo que comentas, bastaría con consultar en BBDD y rellenarlo. Hay ejemplos de cómo poder hacer las consultas en el blog, por lo que no debería ser problema rellenar el combo con las opciones que se deseen.
Gracias por tu comentario.
Salu2,
José Carlos
14 febrero, 2011 - 01:20
Interesantes tus tutoriales pero me perdi en una parte los podrias subir algun servidor lamentablemente dejas un enlace pero esta roto
14 febrero, 2011 - 01:31
Hola,
Tienes razón, al actualizar el diseño del blog, se perdió el contenido que daba el enlace. Ahora lo he restaurado con la última versión que tengo por lo que debería estar todo.
Salu2,
José Carlos