Zend フォームに次のような HTML コードを挿入する必要があります。
<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>
上記のhtmlコードのzendフレームワークのコードは何になりますか。Create_Element を試してみましたが、常に div タグ内にボタンが作成されます。コード例を教えてください。ありがとう
Zend フォームに次のような HTML コードを挿入する必要があります。
<div class="myClass1" id="myId1" style="display: none;"><img src="images/myImage.jpg" /></div>
上記のhtmlコードのzendフレームワークのコードは何になりますか。Create_Element を試してみましたが、常に div タグ内にボタンが作成されます。コード例を教えてください。ありがとう
「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'=>'gnafoobar
'));
もっと単純化できる可能性もあります。
フォーム要素を作成している場合は、以下のコードのように 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;
}
}
要素の値としてマークアップを渡すことにより、「note」要素タイプを使用して html を追加できます。
これは 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 にあらかじめ組み込まれているソリューションです。
tomas.fejfarコメントから次を使用しただけで同じ問題が発生しました。
array(escape => false)
e.g.
$decorators = array(
'ViewHelper',
'Label',
array('Description', array('escape' => false,)),
'Errors')
);
御馳走を働いた。
乾杯
私は通常、HTMLをフォームにレンダリングするためにarray(escape => false)オプションを指定したdescriptionを使用します。
フォーム ViewScript を検討しましたか? このディスカッションを参照してください。
上記の方法ではFormNote
、フォームを送信して検証エラーが発生しても値が消えます!
編集:削除できます。上書きisValid()
すると問題はなくなります。