3

Zend フォームに次のような HTML コードを挿入する必要があります。

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

上記のhtmlコードのzendフレームワークのコードは何になりますか。Create_Element を試してみましたが、常に div タグ内にボタンが作成されます。コード例を教えてください。ありがとう

4

8 に答える 8

8

「html」というカスタム要素を作成しました。/Form/Element に Html.php を追加しました。


/** 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

foobar

'));

もっと単純化できる可能性もあります。

于 2009-10-10T14:45:19.683 に答える
4

フォーム要素を作成している場合は、以下のコードのように 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; 
    }

}
于 2009-12-14T13:06:42.350 に答える
3

要素の値としてマークアップを渡すことにより、「note」要素タイプを使用して html を追加できます。

于 2009-08-06T13:14:06.977 に答える
2

これは 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 にあらかじめ組み込まれているソリューションです。

于 2010-06-29T21:03:02.880 に答える
1

tomas.fejfarコメントから次を使用しただけで同じ問題が発生しました。

array(escape => false)

e.g. 

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

御馳走を働いた。

乾杯

于 2010-06-16T18:02:01.553 に答える
0

私は通常、HTMLをフォームにレンダリングするためにarray(escape => false)オプションを指定したdescriptionを使用します。

于 2009-08-06T21:00:17.823 に答える
0

フォーム ViewScript を検討しましたか? このディスカッションを参照してください。

于 2009-08-14T16:50:51.327 に答える
0

上記の方法ではFormNote、フォームを送信して検証エラーが発生しても値が消えます!

編集:削除できます。上書きisValid()すると問題はなくなります。

于 2011-05-23T13:57:06.127 に答える