Naveed
Naveed

Reputation: 42093

Zend Framework: Insert DIV and Image in my form

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

Upvotes: 3

Views: 16217

Answers (8)

Sascha
Sascha

Reputation: 1

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.

Upvotes: 0

Will Olbrys
Will Olbrys

Reputation: 967

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.

Upvotes: 2

Leonard Austin
Leonard Austin

Reputation: 71

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

Upvotes: 1

Claudio
Claudio

Reputation: 5980

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

}

Upvotes: 4

2ni
2ni

Reputation: 507

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'=>'gna

foobar

'));

There might be some more simplifications possible.

Upvotes: 8

Cal Jacobson
Cal Jacobson

Reputation: 2407

Have you considered a form ViewScript? See this discussion.

Upvotes: 0

Tom&#225;š Fejfar
Tom&#225;š Fejfar

Reputation: 11217

I usually use description with array(escape => false) option to render HTML in form.

Upvotes: 0

David Snabel-Caunt
David Snabel-Caunt

Reputation: 58361

You can use the 'note' element type to add html by passing the markup as the element's value.

Upvotes: 3

Related Questions