Zend Framework: вставьте DIV и изображение в мою форму - PullRequest
3 голосов
/ 06 августа 2009

Мне нужно вставить HTML-код, как это в моей форме Zend:

<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>

Каким будет код в Zend Framework для приведенного выше HTML-кода. Я пытался с Create_Element, но он всегда создает кнопку внутри тега div. Пожалуйста, дайте пример кода. Спасибо

Ответы [ 8 ]

8 голосов
/ 10 октября 2009

Я создал пользовательский элемент с именем "html". Я добавил Html.php в / 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';
}

Во-вторых, мне пришлось добавить помощник вида FormHtml.php (я поместил его в 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;
    }
}

Затем вы можете добавить html в форму следующим образом:


$form->createElement('html', 'someid', array('value'=>'gna<p>foobar</p>'));

Возможны и другие упрощения.

4 голосов
/ 14 декабря 2009

Если вы создаете элемент формы, я думаю, что вы должны переопределить метод isValid (), как показано в приведенном ниже коде, иначе ваше «значение» исчезнет при ошибке проверки:

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

}
3 голосов
/ 06 августа 2009

Вы можете использовать тип элемента note для добавления html, передавая разметку как значение элемента.

2 голосов
/ 30 июня 2010

Это почти закончено в ZF 1.10. Похоже, кто-то создал класс Zend_View_Helper_FormNote, чтобы вы могли вставить произвольный (за исключением декоратора) HTML.

Чтобы использовать его, вы должны расширить 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';
}

Затем, используя загрузчик плагинов формы, добавьте свои классы формы / элемента к объекту формы. Я положил его в папку моей библиотеки (MyNs / Form / Element / Note.php).

 $yourForm= new Zend_Dojo_Form();
 $yourForm->addPrefixPath("MyNS_Form", "MyNS/Form/");

Теперь вы можете называть это как любой элемент.

 $yourForm->addElement(
                'note',
                'myElementId',
                array(
                 'value'=>'<a href="#">omgwtfbbq</a>'
                )
            )

Как я упоминал ранее, он по-прежнему упаковывает ваш код в декоратор, но это решение, предварительно встроенное в ZF.

1 голос
/ 16 июня 2010

имел ту же проблему, только что использовал следующее из комментария tomas.fejfar.

array(escape => false)

e.g. 

$decorators = array(
    'ViewHelper',
    'Label',
    array('Description', array('escape' => false,)),
    'Errors')
);

работал лакомством.

Приветствия

0 голосов
/ 23 мая 2011

При использовании вышеуказанного метода значение FormNote по-прежнему исчезает при отправке формы с ошибками проверки!

Редактировать: можно удалить с перезаписью isValid() проблема исчезла.

0 голосов
/ 14 августа 2009

Рассматривали ли вы форму ViewScript? См. это обсуждение .

0 голосов
/ 07 августа 2009

Я обычно использую описание с опцией array (escape => false) для отображения HTML в форме.

...