Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/07/2011, 02:27
antoniojim
 
Fecha de Ingreso: marzo-2005
Ubicación: Málaga
Mensajes: 115
Antigüedad: 19 años, 8 meses
Puntos: 0
Respuesta: Decorator para un Form

Hola de nuevo, voy a poner todo el código para ver que estoy haciendo mal, la cosa es que si me funciona el decorador para el form (ahora mismo no hace nada), pero los decoradores de los elementos que si funcionaban antes ahora no lo hacen.

Este es el form
/applicattion/forms/Datospago.php

Código PHP:
Ver original
  1. <?php
  2. class Application_Form_Datospago extends Zend_Form
  3. {
  4.     public function init() {
  5.  
  6.         $nombre = new Yimgo_Element_Textr('nombre');
  7.         $nombre->setLabel('label_Nombre');
  8.        
  9.         $apellidos = new Yimgo_Element_Textr('apellidos');
  10.         $apellidos->setLabel('label_Apellidos');
  11.        
  12.         $razon= new Yimgo_Element_Text('razon');
  13.         $razon->setLabel("label_razon");
  14.        
  15.         $dni= new Yimgo_Element_Text('dni');
  16.         $dni->setLabel("label_dni");
  17.        
  18.         $telefono= new Yimgo_Element_Text('telefono');
  19.         $telefono->setLabel("label_telefono");
  20.        
  21.         $movil= new Yimgo_Element_Text('movil');
  22.         $movil->setLabel("label_movil");
  23.        
  24.         $email= new Yimgo_Element_Textr('email');
  25.         $email->setLabel("label_email")
  26.               ->addValidator('EmailAddress');
  27.        
  28.        
  29.         //Direccion de entrega
  30.         $e_direccion=new Yimgo_Element_Textr('e_direccion');
  31.         $e_direccion->setLabel("label_direccion");
  32.        
  33.         $e_poblacion=new Yimgo_Element_Textr('e_poblacion');
  34.         $e_poblacion->setLabel("label_localidad");
  35.        
  36.         $e_cp=new Yimgo_Element_Textr('e_cp');
  37.         $e_cp->setLabel("label_cp");
  38.        
  39.         $e_provincias = new Zend_Form_Element_Select("e_provincias");
  40.         $e_provincias->setLabel("label_provincias")
  41.                 ->setRequired(true)
  42.                 ->addPrefixPath('Yimgo_Decorator_Printit', 'Yimgo/Decorator/Printit/', 'decorator')
  43.                 ->addDecorator('Textitem')
  44.                 ;
  45.        
  46.         $provinciasdb=new Application_Model_DbTable_Provincias();
  47.         $provincias=$provinciasdb->getAllProvincias();
  48.        
  49.         foreach ($provincias as $data) {
  50.             $e_provincias->addMultiOption($data["id"],$data["nombre"]);
  51.         }
  52.        
  53.          //Direccion de factura
  54.         $f_direccion=new Yimgo_Element_Text('f_direccion');
  55.         $f_direccion->setLabel("label_direccion");
  56.        
  57.         $f_poblacion=new Yimgo_Element_Text('f_poblacion');
  58.         $f_poblacion->setLabel("label_localidad");
  59.        
  60.         $f_cp=new Yimgo_Element_Text('f_cp');
  61.         $f_cp->setLabel("label_cp");
  62.        
  63.         $f_provincias = new Zend_Form_Element_Select("f_provincias");
  64.         $f_provincias->setLabel("label_provincias")
  65.                 ->addPrefixPath('Yimgo_Decorator_Printit', 'Yimgo/Decorator/Printit/', 'decorator')
  66.                 ->addDecorator('Textitem')
  67.                 ;
  68.        
  69.         foreach ($provincias as $data) {
  70.             $f_provincias->addMultiOption($data["id"],$data["nombre"]);
  71.         }
  72.        
  73.        
  74.         $comentarios=new Yimgo_Element_Text('comentarios');
  75.         $comentarios->setLabel("label_comentarios");
  76.        
  77.         $submit = new Zend_Form_Element_Submit('submit');
  78.         $submit->setAttrib('id', 'submitbutton')
  79.                 ->setRequired(true)
  80.                 ->setAttrib('class', 'btnform')
  81.                 ->setLabel("label_Send");
  82.  
  83.  
  84.    
  85.    
  86.     $this
  87.       ->addPrefixPath('Yimgo_Decorator_Printit',
  88.                              'Yimgo/Decorator/Printit/',
  89.                              'decorator')
  90.      
  91.       ->addDecorator('FormElements')
  92.       ->addDecorator("Form");
  93.    
  94.      $this->addElementPrefixPath('Yimgo_Decorator_Printit',
  95.                             'Yimgo/Decorator/Printit/',
  96.                             'decorator');
  97.      
  98.     $this->addElements(array(
  99.         $nombre,
  100.         $apellidos,
  101.         $razon,
  102.         $telefono,
  103.         $movil,
  104.         $email,
  105.         $e_direccion,
  106.         $e_poblacion,
  107.         $e_cp,
  108.         $e_provincias,
  109.         $f_direccion,
  110.         $f_poblacion,
  111.         $f_cp,
  112.         $f_provincias,
  113.         $comentarios,
  114.         $submit
  115.         ));
  116.    
  117.    
  118.      
  119.    
  120.  
  121.     }
  122.        
  123.     }


Este sería el elemento texto, tengo dos, el text y el textr, sólo se diferencian en que uno tiene un require y el otro no, por eso sólo copio uno.

/library/Yimgo/Element/Text.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. /**
  4.  * Text
  5.  *
  6.  * @package
  7.  * @author antoniopmfree
  8.  * @version 1.0
  9.  */
  10. class Yimgo_Element_Text extends Zend_Form_Element {
  11.    
  12.     public function init() {
  13.         $this
  14.         ->addPrefixPath('Yimgo_Decorator_Printit', 'Yimgo/Decorator/Printit/', 'decorator')
  15.         ->addDecorator('Textitem')
  16.         ->addFilter('StripTags')
  17.         ->addFilter('StringTrim');
  18.     }
  19. }
  20.  
  21. ?>

Este sería el decorador de los elementos al que hago referencia en el anterior archivo.
/library/Yimbo/Decorator/Printit/Textitem.php

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. class Yimgo_Decorator_Printit_Textitem extends Zend_Form_Decorator_Abstract {
  5.    
  6.     public function buildLabel()
  7.     {
  8.         $element = $this->getElement();
  9.         $label = $element->getLabel();
  10.         if ($translator = $element->getTranslator()) {
  11.             $label = $translator->translate($label);
  12.         }
  13.         if ($element->isRequired()) {
  14.             $label .= '*';
  15.         }
  16.         $label .= ':';
  17.         return $element->getView()
  18.                        ->formLabel($element->getName(), $label);
  19.     }
  20.  
  21.     public function buildInput()
  22.     {
  23.         $element = $this->getElement();
  24.         $helper  = $element->helper;
  25.         return $element->getView()->$helper(
  26.             $element->getName(),
  27.             $element->getValue(),
  28.             $element->getAttribs(),
  29.             $element->options
  30.         );
  31.     }
  32.  
  33.     public function buildErrors()
  34.     {
  35.         $element  = $this->getElement();
  36.         $messages = $element->getMessages();
  37.         if (empty($messages)) {
  38.             return '';
  39.         }
  40.         return '<div class="errors">' .
  41.                $element->getView()->formErrors($messages) . '</div>';
  42.     }
  43.  
  44.     public function buildDescription()
  45.     {
  46.         $element = $this->getElement();
  47.         $desc    = $element->getDescription();
  48.         if (empty($desc)) {
  49.             return '';
  50.         }
  51.         return '<div class="description">' . $desc . '</div>';
  52.     }
  53.  
  54.     public function render($content)
  55.     {
  56.         $element = $this->getElement();
  57.         if (!$element instanceof Zend_Form_Element) {
  58.             return $content;
  59.         }
  60.         if (null === $element->getView()) {
  61.             return $content;
  62.         }
  63.  
  64.         $separator = $this->getSeparator();
  65.         $placement = $this->getPlacement();
  66.         $label     = $this->buildLabel();
  67.         $input     = $this->buildInput();
  68.         $errors    = $this->buildErrors();
  69.         $desc      = $this->buildDescription();
  70.  
  71.         $output = '<tr>
  72.    <td rowspan="18" class="vacio"></td>
  73.    <td class="nombre">'
  74.                 . $label
  75.                 .'</td></tr><td colspan="5">'
  76.                 . $input
  77.                 . $errors
  78.                 . $desc
  79.                 .'</td></tr>';
  80.  
  81.         switch ($placement) {
  82.             case (self::PREPEND):
  83.                 return $output . $separator . $content;
  84.             case (self::APPEND):
  85.             default:
  86.                 return $content . $separator . $output;
  87.         }
  88.     }
  89. }
  90. ?>


y Este es el decorador que he usado para el form, en este caso, lo único que hago es devolver el content, porque primero quiero que me funcione lo otro y luego le pongo lo que me interesa.

/library/Yimgo/Decorator/Printiit/Form.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. class Yimgo_Decorator_Printit_Form extends Zend_Form_Decorator_Abstract {
  5.    
  6.    
  7.   public function render($content)
  8.     {
  9.         return $content;
  10.     }
  11. }
  12. ?>