2010-03-04 10 views
19

Ich versuche, einen Klartextknoten in einer Zend-Form hinzuzufügen - der Zweck besteht darin, nur statischen Text anzuzeigen.Wie fügt man einem Zend-Formular einen 'Klartextknoten' hinzu?

Das Problem ist - ich bin mir nicht bewusst, eine solche Art und Weise zu tun.

Ich habe 'Beschreibung' verwendet, aber das muss an ein Formularelement angehängt werden.

Gibt es eine Möglichkeit, einfach Text als Teil eines Formulars anzuzeigen? Zend betrachtet alles als ein Formelement, also kann ich es nicht einfach ausdrucken.

ZB:

Im Folgenden wird Ihre Fähigkeit testen, auf so und so. . . .

etc ...

Irgendwelche Gedanken?

+0

denke ich, beste Antwort Aines ist –

Antwort

6

Es könnte einen besseren Weg geben, aber ich habe einen Absatz erstellt, indem ich ein benutzerdefiniertes Formularelement und View-Helper verwendet habe. Scheint so viel Code für etwas so einfaches. Bitte lassen Sie mich wissen, wenn Sie eine einfachere Möglichkeit gefunden haben, dies zu tun.

//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

Ich hatte das gleiche Problem und entschied, dass es besser ist, Zend_Form überhaupt nicht zu verwenden, sondern Helper direkt zu verwenden (wie Ruby on Rails) und das Modell zu validieren.

36

Zend hat eine Form Notiz View Helfer (Zend_View_Helper_FormNote), mit dem Sie Text hinzufügen können.

Erstellen Sie einfach ein neues Formularelement (/application/forms/Element/Note.php):

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

In Ihrem Formular:

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

Das ist einfach fantastisch –

+11

Fügen Sie diese Funktion in der Klasse: 'public function isValid ($ value) { return true; } ' Auf diese Weise wird das Element nicht im Validierungsprozess verschwinden. – juque

+1

Ich denke, das sollte die richtige Antwort sein nach dem Ruf und der Einfachheit dieser Lösung :) –

9

ein verborgenes Element mit nicht-entkam Beschreibung Hinzufügen macht das Ding.

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

Funktioniert perfekt. Es ist immer noch an ein Element angehängt, das jedoch nicht so dargestellt wird.

-Code entnommen aus: http://paveldubinin.com/2011/04/7-quick-tips-on-zend-form/

+8

Deshalb liebe ich Zend. Nein nicht wirklich. –

+0

Dies ist für mich die beste Antwort, da das FormNote (Helfer) -Element verschwindet, wenn das Formular POST-ed ist. –

5

Ein wenig spät, aber ich dachte, es in irgendeiner Weise zum Wohl der Gemeinschaft werfen würde.

Aine hat den Nagel auf den Kopf getroffen. FormNote ist was du brauchst, wenn du Text in Zend_Form verwenden willst. Sie können es jedoch verwenden, ohne Zend_Form_Element_Xhtml erweitern zu müssen. Siehe Beispiel unten:

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

Beachten Sie, dass Sie sowohl text als auch html mit dem formNote Helfer verwenden können.

+0

Sehr hilfreich danke. –

+0

Danke. Dies war der einzige Ansatz, der für mich funktionierte. – Ryan

+0

Das funktioniert, aber das Element wird verschwinden, wenn Sie das Formular validieren, das möglicherweise nicht das ist, was Sie wollen. Siehe axiom82 Antwort oben für die Lösung. – Countzero

5

Diese Funktionalität ist über Zend_Form_Element_Note in Zend integriert.

$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

Dies ist die richtige Antwort. Es ist nicht nötig, sie sinnlos zu erweitern und '$ helper' mit dem gleichen Wert zu überschreiben, wie es in der am meisten aktualisierten Antwort der Fall ist. – danronmoon

+0

Ja, viel eleganter und einfacher als die anderen Antworten. Funktioniert perfekt und vermeidet das Verschwinden bei der Validierung. – Countzero

Verwandte Themen