2010-03-04 15 views
19

Sto cercando di aggiungere un nodo di testo normale in una forma zend - lo scopo è quello di disperdere solo del testo statico.Come si aggiunge un "nodo di testo normale" a un modulo di zend?

Il problema è - non sono a conoscenza di un modo simile per farlo.

Ho usato 'descrizione' ma che deve essere collegato a un elemento del modulo.

C'è un modo per visualizzare semplicemente del testo come parte di un modulo? Zend considera tutto come un elemento di forma, quindi non posso semplicemente stamparlo.

Esempio:

Di seguito metterà alla prova la tua abilità in così e così. . . .

ecc ...

Qualche idea?

+0

Penso migliore risposta è di –

risposta

6

Potrebbe esserci un modo migliore, ma ho creato un paragrafo utilizzando un elemento del modulo personalizzato e l'aiuto della vista. Sembra un sacco di codice per qualcosa di così semplice. Per favore fatemi sapere se avete trovato un modo più semplicistico di farlo.

//From your form, add the MyParagraph element 
$this->addElement(new Zend_Form_Element_MyParagraph('myParagraph')); 

class Zend_Form_Element_MyParagraph extends Zend_Form_Element 
{ 
    public $helper = 'myParagraph'; 
    public function init() 
    { 
     $view = $this->getView(); 
    } 
} 

class Zend_View_Helper_MyParagraph extends Zend_View_Helper_FormElement { 

    public function init() { 
    } 

    public function myParagraph() { 
     $html = '<p>hello world</p>'; 
     return $html; 
    } 

} 
3

Ho affrontato lo stesso problema e ho deciso che è meglio non usare Zend_Form, ma utilizzare direttamente gli helper (come fa Ruby on Rails) e convalidare sul modello.

36

Zend ha una vista modulo nota helper (Zend_View_Helper_FormNote), che è possibile utilizzare per aggiungere del testo.

Basta creare un nuovo elemento del modulo (/application/forms/Element/Note.php):

class Application_Form_Element_Note extends Zend_Form_Element_Xhtml 
{ 
    public $helper = 'formNote'; 
} 

Nel modulo:

$note = new Application_Form_Element_Note(
    'test', 
    array('value' => 'This is a <b>test</b>') 
); 
$this->addElement($note); 
+1

Aine che è semplicemente fantastico –

+11

Aggiungi questa funzione nella classe: 'isValid ($ value) {public function return true; } In questo modo l'elemento non scomparirà nel processo di convalida. – juque

+1

Penso che questa dovrebbe essere la risposta corretta in base alla reputazione e alla semplicità di questa soluzione :) –

9

L'aggiunta di un elemento nascosto con i non-sfuggito Descrizione fa la cosa

$form->addElement('hidden', 'plaintext', array(
    'description' => 'Hello world! <a href="#">Check it out</a>', 
    'ignore' => true, 
    'decorators' => array(
     array('Description', array('escape'=>false, 'tag'=>'')), 
    ), 
)); 

Funziona perfettamente. È ancora collegato a un elemento, che tuttavia non viene visualizzato in questo modo.

Codice tratto da: http://paveldubinin.com/2011/04/7-quick-tips-on-zend-form/

+8

Ecco perché amo Zend. No, non proprio. –

+0

Questa è per me la migliore risposta in quanto l'elemento formNote (helper) scompare quando il modulo è POST-ed. –

5

Un po 'tardi, ma ho pensato di buttarlo in alcun modo per il bene della comunità.

Aine ha colpito il chiodo sulla testa. FormNote è ciò di cui hai bisogno se vuoi usare il testo in Zend_Form. Tuttavia, puoi usarlo senza la necessità di estendere Zend_Form_Element_Xhtml. Vedere l'esempio sotto:

$text = new Zend_Form_Element_Text('myformnote'); 
$text->setValue("Text goes here") 
    ->helper = 'formNote'; 

Nota che è possibile utilizzare sia il testo che l'html con l'aiuto formNote.

+0

Molto utile grazie. –

+0

Grazie. Questo era l'unico approccio che ha funzionato per me. – Ryan

+0

Funziona ma l'elemento scompare quando si convalida il modulo, che può essere o non essere ciò che si desidera. Vedere la risposta axiom82 sopra per la soluzione. – Countzero

5

Questa funzionalità è incorporata in Zend tramite Zend_Form_Element_Note.

$note = new Zend_Form_Element_Note('forgot_password'); 
$note->setValue('<a href="' . $this->getView()->serverUrl($this->getView()->url(array('action' => 'forgot-password'))) . '">Forgot Password?</a>'); 
+0

Questa è la risposta corretta. Non c'è bisogno di estenderlo inutilmente e sovrascrivere '$ helper' con lo stesso valore che si ottiene nella risposta più aggiornata. – danronmoon

+0

Sì, molto più elegante e semplice delle altre risposte. Funziona perfettamente ed evita la scomparsa in fase di validazione. – Countzero

Problemi correlati