I need to insert html code like this in my zend form:
<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>
What will be the code in zend framework for above html code. I tried with Create_Element but it always create a button inside a div tag. Please give an example code. Thanks
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.
If you're creating a form element, I think you have to override the isValid() method, as in the code below, or your "value" will disappear upon a validation error:
class RenomoZF_Form_Element_Note extends Zend_Form_Element_Xhtml
{
/**
* Default form view helper to use for rendering
* @var string
*/
public $helper = 'formNote';
public function isValid($value, $context = null) {
return TRUE;
}
}
You can use the 'note' element type to add html by passing the markup as the element's value.
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.
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
I usually use description with array(escape => false) option to render HTML in form.
Have you considered a form ViewScript? See this discussion.
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.