Zend Framework: Insert DIV and Image in my form

前端 未结 8 1823
伪装坚强ぢ
伪装坚强ぢ 2020-12-19 22:30

I need to insert html code like this in my zend form:

相关标签:
8条回答
  • 2020-12-19 22:48

    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.

    0 讨论(0)
  • 2020-12-19 22:49

    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.

    0 讨论(0)
  • 2020-12-19 22:50

    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.

    0 讨论(0)
  • 2020-12-19 22:53

    Have you considered a form ViewScript? See this discussion.

    0 讨论(0)
  • 2020-12-19 22:54

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

    0 讨论(0)
  • 2020-12-19 22:57

    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

    0 讨论(0)
提交回复
热议问题