Programación

2010/04/07

Zend Framework: Zend_Form Decorators Ejemplo

Zend Logo AgeValed

Zend_Framework Decorators

Hoy voy a escribir un poco sobre la decoraciones en los form de Zend, ya que por defecto es bastante feo!

Hay varias formas de cambiar el formato, una que leí es cambiando el css, otra es seteandole un Decorators al form, y definirlo como nosotros mas nos guste!

Una forma que estoy usando, gracias a un amigo, es la siguiente:

En la página donde se arma el form (yo estoy usando un archivo en el modelo):

Definir:

private $decoratorUser = array();

public function init(){
      $this->decoratorUser = array(
            'ViewHelper',
            'Errors',
            array('ViewScript', array('viewScript' => '/decorators/decoratorUser.phtml', 'placement' => false)),
      );
}

Aca le digo que tome la decoración del la pagina ubicada en views/scripts/decorators/decoratorUser.phtml

decoratorUser.phtml

<div>
    <!--  parte que remplaza el decorador Label -->
    <?php
    $attribs = $this->element->getAttribs();
    $label = $this->element->getLabel();
    //nuevo, verificamos si el elemento es requerido,
    //entonces agregamos un elemento en html al final de la etiqueta
    $attribs['escape'] = false;
    $attribs['class'] = '';
    $label = $this->escape($label);
    if ($this->element->isRequired()) {
        echo "<div id='labelform' name='labelform' >" . $this->formLabel($this->element->getName(), $label, $attribs) . " <span class='required'>*</span> </div>";
    } else {
        echo "<div id='labelform' name='labelform' >" . $this->formLabel($this->element->getName(), $label, $attribs) . "</div>";
    }
    echo "<div id='inputform' name='inputform' >" . $this->content . "</div><div id='val" . $this->element->getName() . "' name='val" . $this->element->getName() . "' class='validarform' ></div>";
    ?>
</div>
<br>

Lo que hace esto es separar el label con el input, así se le da el style que uno quiere, además se le agrega un * si es requerido.

Yo además, acá no se encuentra, le agregue un validador con Jquery y ajax, si alguien le interesa me avisa y explico como..

En el armado del form deberia quedar:

$usuario = $form->createElement("text","formusuario")
      ->setLabel("Usuario")
       ->setDecorators($this->decoratorUser)
       ->setRequired(true)
 $form->addElement($usuario);

Con eso ya estaría todo, obviamente creando los css necesarios, a gusto de cada uno!

Cualquier duda o problema me avisan..

Saludos!



About the Author

AgeValed
Pablo Ignacio de la Vega Ibañez, también conocido en algunos lugares como AgeValed, el creador de este blog. Actualmente estoy trabajando como Líder Técnico y Supervisor de Equipo en el área de desarrollo PHP.




 
 

 
PHP Logo AgeValed

PHP 5.4.0 liberado!

Les comento que ya se encuentra la nueva versión de PHP liberada, la versión 5.4.0, luego de varios updates que se hicieron a la versión PHP 5.3 ya contamos con nuevas versión que incluye (según ellos) un gran núme...
by AgeValed
0

 
 
PHP
Zend Logo AgeValed

Zend Framework – Zend_Translate + Zend_Route

Les quiero compartir algo que estaba necesitando para un sitio web que estoy creando, y estuve peleando bastante para que funcione todo perfecto. Primero que nada quiero agradecer a Jon Lebensold con la Introducción a Zend...
by AgeValed
6

 
 
PHP
PHP Logo AgeValed

PHP – Errores

En este resumen voy a escribir sobre los el control y registro de los errores en PHP. PHP nos permite definir nuestras reglas para controlar los errores, crear errores personificados o como serán registrados/notificados. Tipos...
by AgeValed
0

 

 
PHP
PHP Logo AgeValed

PHP – Funciones

Funciones en PHP, este resumen debería haberlo hecho un par de post antes, pero se me paso, así que mas vale tarde que nunca! Espero que lo sigan disfrutando y que les interese este tipo de post! Mientras alguien lo lea ya es...
by AgeValed
0

 
 
PHP
PHP Logo AgeValed

PHP – Constantes

Vamos a continuar con los resúmenes de PHP, en este post voy a escribir un resumen sobre las constantes. Una constante es un identificador (nombre) para expresar un valor simple. Como el nombre sugiere, este valor no puede var...
by AgeValed
5

 




5 Comentarios


  1. rolly

    Hola me gusto, podrías mostrar como es eso de los validadores con ajax, si es que ya no escribiste algún artículo sobre eso.
    Gracias.


  2. Te dejo una introducción sobre el tema. (veré si es necesario después hacer un post)

    en el decoratorUser.phtml

    podes usar

    echo "".$this->content."<span class='required'>*</span> element->getName()."' name='val".$this->element->getName()."' class='validarform' >";
    

    en vez de

    echo "".$this->content."<span class='required'>*</span> ";
    

    (también en el que no tiene el requiered)

    en la funcion que arma el form agregar:

    ->setAttrib('onBlur', 'verificarValor("formusuario",this.value);');
    

    Supongamos algo asi

    $usuario = $form->createElement("text","formusuario")
    	->setLabel("Usuario")
    	->setDecorators($this->decoratorUser)
    	->setRequired(true)
    	->setAttrib('onBlur', 'verificarValor("formusuario",this.value);');
    $form->addElement($usuario);
    

    Después en un js agregar la funcion…

    function verificarValor(nombre,valor){
    	$.ajax({
    		type: "GET",
    		url: "/validadores/"+nombre+"/",
    		data: "valor="+valor,
    		async:false,
    		success: function(datos){
    			$("#val"+nombre).html(datos);
    			if (datos){
    				$("#"+nombre).addClass('bad');
    			}else{
    				$("#"+nombre).removeClass('bad');
    			}
    		}
    	});
    }
    

    y crear el siguiente file

    ValidadoresController.php en la carpeta de controladores

    y que tenga el siguiente texto

    getResponse();
    		$this->_helper->layout->disableLayout();
      	}
    
      	public function formusuarioAction(){
      		$this->_helper->layout->disableLayout();
      		$param = $this->_getAllParams();
      		$usuariosDB = new usuariosDB();
      		if($usuariosDB->getUsuarioByNombre($param['valor'])){
      			print "Nombre de Usuario ya registrado";
      		}
    
      	}
    

    Supongo que con esto te vastara para tender ma so menos lo que hago y por que lo hago!

    si tenes mas dudas preguntame y lo respondere, despues hago un post mejor con mas datos!

    saludos!


  3. carloss

    disculpa donde como inserato la hoja de estilo.css y desde que archivo lo llamo.
    gracias


  4. @carloss -> la hoja de estilo lo pones dentro de la carpeta html (o donde tengas el handler y los archivos js y css del proyecto) luego lo llamas desde el layout.phtml y listo.


  5. Jhosep

    hola ta bueno tu post, una consulta al momento de subir mis archivos al host y cargar mi pagina me muestra la lista de archivos de zend como puedo hacer para q me redireccione defrente al index sin q salga la wada de public?…..



Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="">


Plugin from the creators of Brindes :: More at Plulz Wordpress Plugins