zend tutorial framework documentacion php zend-framework zend-form zend-form-element

php - tutorial - zend framework doc



Zend Forms-Modificación de ID de elemento para permitir su reutilización (2)

Puede agregar una propiedad entera estática (digamos self :: $ counter) a su clase heredada Zend_Form. Lo incrementa en el método init (). Para cada elemento que cree en su objeto Zend_Form, añada esa propiedad a su elemento:

$element->setAttrib(''id'', self::$counter + ''_myId'');

Tengo un objeto Zend_Form que quiero reutilizar varias veces en una página. El problema que tengo es que cada vez que se procesa tiene los mismos ID de elemento. No he podido encontrar un método para dar a todos los ID un prefijo o sufijo único cada vez que presento el formulario.

Solución completa

Subclase Zend_Form :

class My_Form extends Zend_Form { protected $_idSuffix = null; /** * Set form and element ID suffix * * @param string $suffix * @return My_Form */ public function setIdSuffix($suffix) { $this->_idSuffix = $suffix; return $this; } /** * Render form * * @param Zend_View_Interface $view * @return string */ public function render(Zend_View_Interface $view = null) { if (!is_null($this->_idSuffix)) { // form $formId = $this->getId(); if (0 < strlen($formId)) { $this->setAttrib(''id'', $formId . ''_'' . $this->_idSuffix); } // elements $elements = $this->getElements(); foreach ($elements as $element) { $element->setAttrib(''id'', $element->getId() . ''_'' . $this->_idSuffix); } } return parent::render($view); } }

Bucle en la secuencia de comandos de vista:

<?php foreach ($this->rows as $row) : ?> <?php echo $this->form->setDefaults($row->toArray())->setIdSuffix($row->id); ?> <?php endforeach; ?>


Puede subclase Zend_Form y sobrecargar el método de render para generar identificadores automáticamente:

public function render() { $elements = $this->getElements(); foreach ($elements as $element) { $element->setAttrib(''id'', $this->getName() . ''_'' . $element->getId(); } }

Esto es solo un pseudo-código. Por supuesto, puede modificar esto para satisfacer sus necesidades.