2009-03-13 9 views
5

Mi rendo conto che I dovrebbe essere in grado di farlo, ma cosa posso dire, io non lo ottenerlo. Ho persino smesso di fumare finché i miei occhi non hanno fritto. Imparo meglio con gli esempi, non con le spiegazioni profonde fornite dai documenti di Zend, o con la tipica risposta di "decoratore d'uso" che solitamente questo tipo di domande produce. Ho bisogno di markup come questo:Modulo Zend: aggiungere un collegamento a destra di un campo di testo

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

Tutti i suoi vaniglia, tranne il LINK in più dopo l'ingresso. Sì, è all'interno del dd, proprio accanto al link, ed è quello che non riesco ad accadere.

Ecco il codice (leggermente modificato) che ho usato per creare il sopra HTML

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

Ogni codice di esempio o meglio spiegazione renderebbe questo niubbo molto molto felice.

Cheers!

risposta

24

Vedere la mia risposta a this thread nella mailing list e il mio blog post su questo. È fondamentalmente lo stesso processo descritto da Aaron.

Si può anche andare via decoratore, utilizzando la proprietà descrizione di tenere il link (non testato):

<?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); 

Non sono sicuro se il 'tag'=>false nel Description decoratore avrebbe funzionato, ma vale la pena un colpo. Scusa, non posso testarlo ora, la mia scatola di sviluppo è rotta al momento. Se fallisce, prova il metodo di rendering del decoratore manuale descritto in questi due collegamenti.

+0

Sembra che stavo vicino. Questo funziona perfettamente. Grazie! –

5

Penso che tu sia alla ricerca di pieno controllo del decoratore tramite uno script Vista:

Zend Framework Manual

In sostanza, si vuole impostare la proprietà ViewScript dell'elemento al percorso allo script, e quindi passa eventuali informazioni aggiuntive che desideri inviare, forse il linkHref o il titolo del link che stai 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'); 

Allora il vostro ViewScript sarebbe simile a questa, io non sono sicuro di come tutti gli helper sono all'interno di un'istanza di uno Zend_Form_Element, ma la sua un po 'come questo:

<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 volte, farlo in un viewScript è migliore perché ti dà il controllo del 100% dell'elemento, pur rimanendo piuttosto DRY.

+0

ringrazio tu - questo funzionerà perfettamente nelle forme più complicate –

1

Solo per aggiungere un po 'di supporto al post di Aaron, dopo ore di head-bashing per fare qualcosa VERAMENTE semplice (questo sembra negare il punto di avere un framework), se si scopre che questo non funziona sui checkboxes allora è perché devi usare questo nel tuo .phtml (basato sull'esempio di 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> 

OPZIONI! OPZIONI! OPZIONI! Dov'eri quando avevo bisogno di trovarti ?!Quindi non dimenticare di aggiungere il seguente al vostro aiuto, se si sta utilizzando le caselle di controllo:

$this->element->options 

Questo funziona bene per l'aggiunta di Termini e Condizioni Casella di controllo con Zend_Form_Element_Checkbox (che è per il SEO)

Problemi correlati