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<?php
class Application_Form_Datospago extends Zend_Form
{
public function init() {
$nombre = new Yimgo_Element_Textr('nombre');
$nombre->setLabel('label_Nombre');
$apellidos = new Yimgo_Element_Textr('apellidos');
$apellidos->setLabel('label_Apellidos');
$razon= new Yimgo_Element_Text('razon');
$razon->setLabel("label_razon");
$dni= new Yimgo_Element_Text('dni');
$dni->setLabel("label_dni");
$telefono= new Yimgo_Element_Text('telefono');
$telefono->setLabel("label_telefono");
$movil= new Yimgo_Element_Text('movil');
$movil->setLabel("label_movil");
$email= new Yimgo_Element_Textr('email');
$email->setLabel("label_email")
->addValidator('EmailAddress');
//Direccion de entrega
$e_direccion=new Yimgo_Element_Textr('e_direccion');
$e_direccion->setLabel("label_direccion");
$e_poblacion=new Yimgo_Element_Textr('e_poblacion');
$e_poblacion->setLabel("label_localidad");
$e_cp=new Yimgo_Element_Textr('e_cp');
$e_cp->setLabel("label_cp");
$e_provincias = new Zend_Form_Element_Select("e_provincias");
$e_provincias->setLabel("label_provincias")
->setRequired(true)
->addPrefixPath('Yimgo_Decorator_Printit', 'Yimgo/Decorator/Printit/', 'decorator')
->addDecorator('Textitem')
;
$provinciasdb=new Application_Model_DbTable_Provincias();
$provincias=$provinciasdb->getAllProvincias();
foreach ($provincias as $data) {
$e_provincias->addMultiOption($data["id"],$data["nombre"]);
}
//Direccion de factura
$f_direccion=new Yimgo_Element_Text('f_direccion');
$f_direccion->setLabel("label_direccion");
$f_poblacion=new Yimgo_Element_Text('f_poblacion');
$f_poblacion->setLabel("label_localidad");
$f_cp=new Yimgo_Element_Text('f_cp');
$f_cp->setLabel("label_cp");
$f_provincias = new Zend_Form_Element_Select("f_provincias");
$f_provincias->setLabel("label_provincias")
->addPrefixPath('Yimgo_Decorator_Printit', 'Yimgo/Decorator/Printit/', 'decorator')
->addDecorator('Textitem')
;
foreach ($provincias as $data) {
$f_provincias->addMultiOption($data["id"],$data["nombre"]);
}
$comentarios=new Yimgo_Element_Text('comentarios');
$comentarios->setLabel("label_comentarios");
$submit = new Zend_Form_Element_Submit('submit');
$submit->setAttrib('id', 'submitbutton')
->setRequired(true)
->setAttrib('class', 'btnform')
->setLabel("label_Send");
$this
->addPrefixPath('Yimgo_Decorator_Printit',
'Yimgo/Decorator/Printit/',
'decorator')
->addDecorator('FormElements')
->addDecorator("Form");
$this->addElementPrefixPath('Yimgo_Decorator_Printit',
'Yimgo/Decorator/Printit/',
'decorator');
$this->addElements(array( $nombre,
$apellidos,
$razon,
$telefono,
$movil,
$email,
$e_direccion,
$e_poblacion,
$e_cp,
$e_provincias,
$f_direccion,
$f_poblacion,
$f_cp,
$f_provincias,
$comentarios,
$submit
));
}
}
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<?php
/**
* Text
*
* @package
* @author antoniopmfree
* @version 1.0
*/
class Yimgo_Element_Text extends Zend_Form_Element {
public function init() {
$this
->addPrefixPath('Yimgo_Decorator_Printit', 'Yimgo/Decorator/Printit/', 'decorator')
->addDecorator('Textitem')
->addFilter('StripTags')
->addFilter('StringTrim');
}
}
?>
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<?php
class Yimgo_Decorator_Printit_Textitem extends Zend_Form_Decorator_Abstract {
public function buildLabel()
{
$element = $this->getElement();
$label = $element->getLabel();
if ($translator = $element->getTranslator()) {
$label = $translator->translate($label);
}
if ($element->isRequired()) {
$label .= '*';
}
$label .= ':';
return $element->getView()
->formLabel($element->getName(), $label);
}
public function buildInput()
{
$element = $this->getElement();
$helper = $element->helper;
return $element->getView()->$helper(
$element->getName(),
$element->getValue(),
$element->getAttribs(),
$element->options
);
}
public function buildErrors()
{
$element = $this->getElement();
$messages = $element->getMessages();
return '';
}
return '<div class="errors">' .
$element->getView()->formErrors($messages) . '</div>';
}
public function buildDescription()
{
$element = $this->getElement();
$desc = $element->getDescription();
return '';
}
return '<div class="description">' . $desc . '</div>';
}
public function render($content)
{
$element = $this->getElement();
if (!$element instanceof Zend_Form_Element) {
return $content;
}
if (null === $element->getView()) {
return $content;
}
$separator = $this->getSeparator();
$placement = $this->getPlacement();
$label = $this->buildLabel();
$input = $this->buildInput();
$errors = $this->buildErrors();
$desc = $this->buildDescription();
$output = '<tr>
<td rowspan="18" class="vacio"></td>
<td class="nombre">'
. $label
.'</td></tr><td colspan="5">'
. $input
. $errors
. $desc
.'</td></tr>';
switch ($placement) {
case (self::PREPEND):
return $output . $separator . $content;
case (self::APPEND):
default:
return $content . $separator . $output;
}
}
}
?>
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<?php
class Yimgo_Decorator_Printit_Form extends Zend_Form_Decorator_Abstract {
public function render($content)
{
return $content;
}
}
?>