Programación

07/04/2010

Zend Framework: Zend_Form Decorators Ejemplo

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

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 "
" . $this->formLabel($this->element->getName(), $label, $attribs) . " *
"; } else { echo "
" . $this->formLabel($this->element->getName(), $label, $attribs) . "
"; } echo "
" . $this->content . "
"; ?>

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

Doctrine2 – Getting Started Issues

Luego de querer instalar y hacer funcionar doctrine en nuestro querido y amado Windows, me encontré con un par de problemas, y por lo que vi en internet a varios le paso lo mismo, vamos a tomar como ejemplo el Doctrine –...
by AgeValed
1

 
 
PHP

Zend Framework – Almacenamiento de sesión en base de datos

En este mini tutorial voy a mostrarles como guardar la sesión en base de datos con ZF 1, esto es muy util para manejo de sesiones en un entorno con múltiples servidores. Material Relacionado Zend_Session_SaveHandler_DbTable Z...
by AgeValed
0

 
 

PHP Conference Argentina 2013

El 4 y 5 de Octubre se celebrará, en la Ciudad de Buenos Aires (Argentina), la PHP Conference Argentina, edición local de la conferencia PHP más popular. Esta edición no solamente está destinada a los programadores PHP, ...
by AgeValed
0

 

 

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

 




6 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?…..


  6. Trent

    Have you ever thought about adding a little bit more than just your
    articles? I mean, what you say is fundamental and all.However imagine if
    you added some great pictures or videos to give your posts more, “pop”!
    Your content is excellent but with images and clips, ths site could definitely be one of the
    most beneficial iin its field. Excellent blog!



Deja un comentario

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

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.