19

I'm trying to add a plain text node in a zend form - the purpose is to only dispay some static text.

The problem is - im not aware of any such way to do it.

I have used 'description' but that HAS to be attached to a form element.

Is there any way to simply display some text as part of a form? Zend considers everything as a form element so I cannot just print it out.

Eg:

The following will test your ability on so and so. . . .

etc...

Any thoughts?

Mallika Iyer
  • 700
  • 2
  • 12
  • 23

7 Answers7

37

Zend has a form note view helper (Zend_View_Helper_FormNote), which you can use to add text.

Just create a new form element (/application/forms/Element/Note.php):

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

In your form:

$note = new Application_Form_Element_Note(
    'test',
    array('value' => 'This is a <b>test</b>')
);
$this->addElement($note);
Aine
  • 2,638
  • 3
  • 30
  • 40
  • 11
    Add this function in the class: `public function isValid($value){ return true; }` In that way the element will not disappear in the validation process. – juque Jul 19 '12 at 13:23
  • 1
    I think this should be the correct answer according to the reputations and the simplicity of this solution :) – John Skoumbourdis Mar 13 '13 at 09:25
  • 1
    I tried this and a bunch of related approaches and couldn't get them to work. http://stackoverflow.com/a/15908841/470749 worked for me, however. – Ryan Jan 26 '15 at 22:45
10

Adding a hidden element with non-escaped description does the thing.

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

Works perfectly. It is still attached to an element, which is, however, not rendered this way.

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

Zajo
  • 362
  • 2
  • 14
6

A little late but thought I'd throw it in anyway for the benefit of the community.

Aine has hit the nail on the head. FormNote is what you need if you want to use text in Zend_Form. However, you can use it without needing to extend Zend_Form_Element_Xhtml. See example below:

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

Note that you can use both text and html with the formNote helper.

Rijndael
  • 3,683
  • 2
  • 24
  • 26
  • Thanks. This was the only approach that worked for me. – Ryan Jan 26 '15 at 22:45
  • This works but the element will disappear when you validate the form, which may or may not be what you want. See axiom82 answer above for the solution. – Countzero Nov 19 '16 at 12:34
6

There might be a better way, but I created a paragraph by using a custom form element and view helper. Seems like alot of code for something so simple. Please let me know if you've found a more simplistic way to do it.

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

}
Chris
  • 1,242
  • 3
  • 16
  • 23
5

This functionality is built into Zend via 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>');
axiom82
  • 636
  • 1
  • 7
  • 15
  • This is the correct answer. No need to uselessly extend it and override `$helper` with the same value as is done in the most upvoted answer. – danronmoon Feb 28 '14 at 15:22
  • Yes, much more elegant and simple than the other answers. Works perfectly and avoids the disappearance on validation. – Countzero Nov 19 '16 at 12:33
3

I faced the same problem and decided is better not to use Zend_Form at all, but to use directly view helpers (like Ruby on Rails does) and validate on the model.

clyfe
  • 23,695
  • 8
  • 85
  • 109
0

This one-liner works for me:

$objectForm->addElement(new Zend_Form_Element_Note('note', array('value' => 'Hello World')));
Casso
  • 139
  • 6