2009-03-13 27 views
5

me doy cuenta que debería ser capaz de hacer esto, pero ¿qué puedo decir, yo no entiendo . Incluso he revuelto hasta que mis ojos se fríen. Aprendo mejor con ejemplos, no con las explicaciones profundas que brindan los documentos de Zend, o la respuesta típica de "uso de decoradores" que suele producir este tipo de preguntas. Lo que necesito es marcado como esto:Formulario Zend: Añadir un enlace a la derecha de un campo de texto

<dt> 
    <label for="name">Name</label> 
</dt> 
<dd> 
    <input type="text" name="name" id="name" value=""> 
    <a href="#">My Link</a> 
</dd> 

Su todo vainilla, excepto el eslabón adicional después de la entrada. Sí, está dentro de la dd, justo al lado del enlace, y eso es lo que no puedo pasar.

Aquí está el código (ligeramente modificada) que he utilizado para crear el HTML anterior

$name = new Zend_Form_Element_Text('name'); 
$name->setLabel('Name');   
$this->addElements($name); 
$this->addDisplayGroup(array('name'), 'people'); 

Cualquier código de ejemplo o mejor explicación haría que este novato muy, muy feliz.

¡Salud!

Respuesta

24

Ver mi respuesta a this thread en la lista de correo y mi blog post acerca de esto. Básicamente es el mismo proceso que describió Aaron.

También puede ir por el camino decorador, utilizando la propiedad de descripción para mantener el enlace (no probado):

<?php 
$foo = new Zend_Form_Element_Text('name'); 
$foo->setLabel('Name') 
    ->setDescription('<a href="#">Link</a>') 
    ->setDecorators(array(
     'ViewHelper', 
     array('Description', array('escape' => false, 'tag' => false)), 
     array('HtmlTag', array('tag' => 'dd')), 
     array('Label', array('tag' => 'dt')), 
     'Errors', 
    )); 
$form->addElement($foo); 

No estoy seguro de si el 'tag'=>false en el Description decorador quiere trabajar, pero vale la pena un disparo. Lo siento, no puedo probar esto ahora, mi caja de desarrollo está rota en este momento. Si falla, pruebe el método de renderización decorador manual descrito en esos dos enlaces.

+0

Parece que estaba cerca. Esto funciona perfectamente ¡Gracias! –

5

pienso que usted está buscando el control total del decorador a través de un Ver secuencia de comandos:

Zend Framework Manual

Básicamente, que desea establecer la propiedad viewScript del elemento de la ruta a su guión, y luego, transmita cualquier información adicional que desee enviar, quizás el linkHref o título del enlace que está creando.

$name = new Zend_Form_Element_Text('name'); 
$name->setLabel('Name'); 
$name->viewScript = 'path/to/viewScript.phtml'; 
$name->decorators = array('ViewScript', array('linkHref' => '#', 
               'linkTitle' => 'My Link'); 
$this->addElements($name); 
$this->addDisplayGroup(array('name'), 'people'); 

Luego, su viewScript se vería así, no estoy seguro de cómo todos los ayudantes están dentro de una instancia de un Zend_Form_Element, pero su algo como esto:

<dt><?= $this->formLabel($this->element->getName(), 
        $this->element->getLabel()) ?></dt> 
<dd><?= $this->{$this->element->helper}(
        $this->element->getName(), 
        $this->element->getValue(), 
        $this->element->getAttribs() 
       ) ?> 
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a> 
<?= $this->formErrors($this->element->getMessages()) ?> 

</dd> 

A veces, haciéndolo en una viewScript es mejor porque le da un control del 100% del elemento, mientras sigue siendo bastante DRY.

+0

Agradezca usted - esto funcionará perfectamente en las formas más complicadas –

1

Solo para agregar un poco de apoyo a la publicación de Aaron, después de horas de ataques a la cabeza para hacer REALMENTE algo simple (esto parece negar el punto de tener un marco), si usted encuentra que esto no funciona en sus casillas entonces es porque debe usar esto en su .phtml (basado en el ejemplo de Aaron):

<dt><?= $this->formLabel($this->element->getName(), 
        $this->element->getLabel()) ?></dt> 
<dd><?= $this->{$this->element->helper}(
        $this->element->getName(), 
        $this->element->getValue(), 
        $this->element->getAttribs(), 
        $this->element->options 
       ) ?> 
<a href="<?= $this->linkHref; ?>"><?= $this->linkTitle; ?></a> 
<?= $this->formErrors($this->element->getMessages()) ?> 

</dd> 

OPCIONES! OPCIONES! OPCIONES! ¿Dónde estabas cuando necesitaba encontrarte?Así que no se olvide de añadir lo siguiente a su ayudante si está utilizando casillas de verificación:

$this->element->options 

Esto funciona bien para añadir un Términos y Condiciones casilla de verificación con Zend_Form_Element_Checkbox (que es para el SEO)

Cuestiones relacionadas