I need to insert html code like this in my zend form:
With above method the value of FormNote
still disappears on submitting the form with validation errors!
Edit: Can be deleted, with overwriting isValid()
the problem is gone.
This is quasi-finished in ZF 1.10. Seems someone made a Zend_View_Helper_FormNote class so you can insert arbitrary (cept for the decorator) HTML.
To use it you must extend Zend_Form_Element_Xhtml.
<?php
/** Zend_Form_Element_Xhtml */
require_once 'Zend/Form/Element/Xhtml.php';
/**
* Note form element
*
*/
class MyNS_Form_Element_Note extends Zend_Form_Element_Xhtml
{
/**
* Default form view helper to use for rendering
* @var string
*/
public $helper = 'formNote';
}
Then using the form plugin loader, add your form/element classes to the form object. I put it in my library folder (MyNs/Form/Element/Note.php).
$yourForm= new Zend_Dojo_Form();
$yourForm->addPrefixPath("MyNS_Form", "MyNS/Form/");
Now you can call it just like any element.
$yourForm->addElement(
'note',
'myElementId',
array(
'value'=>'<a href="#">omgwtfbbq</a>'
)
)
As I mentioned before this still wraps your code in the decorator, but its a solution pre-built into ZF.
I created a custom element called "html". I added Html.php to /Form/Element:
/** Zend_Form_Element_Xhtml */
require_once 'Zend/Form/Element/Xhtml.php';
/**
* HTML form element
*
*/
class Zend_Form_Element_Html extends Zend_Form_Element_Xhtml
{
/**
* Default form view helper to use for rendering
* @var string
*/
public $helper = 'formHtml';
}
Second I had to add a view helper FormHtml.php (I put it in application/views/helpers):
/**
* Abstract class for extension
*/
require_once 'Zend/View/Helper/FormElement.php';
/**
* Helper to show HTML
*
*/
class Zend_View_Helper_FormHtml extends Zend_View_Helper_FormElement
{
/**
* Helper to show a html in a form
*
* @param string|array $name If a string, the element name. If an
* array, all other parameters are ignored, and the array elements
* are extracted in place of added parameters.
*
* @param mixed $value The element value.
*
* @param array $attribs Attributes for the element tag.
*
* @return string The element XHTML.
*/
public function formHtml($name, $value = null, $attribs = null)
{
$info = $this->_getInfo($name, $value, $attribs);
extract($info); // name, value, attribs, options, listsep, disable
// Render the button.
$xhtml = 'view->escape($id) . '">'
. $this->_htmlAttribs($attribs)
. $this->view->escape($value) . '';
return $xhtml;
}
}
You can then add html to your form as follows:
$form->createElement('html', 'someid', array('value'=>'gnafoobar
'));
There might be some more simplifications possible.
Have you considered a form ViewScript? See this discussion.
You can use the 'note' element type to add html by passing the markup as the element's value.
had the same problem just used the following from tomas.fejfar comment.
array(escape => false)
e.g.
$decorators = array(
'ViewHelper',
'Label',
array('Description', array('escape' => false,)),
'Errors')
);
Worked a treat.
Cheers