非表示のフォーム要素のデフォルトのデコレータを削除しようとしています。デフォルトでは、非表示の要素は次のように表示されます。
<dt>Hidden Element Label (if I had set one)</dt>
<dd><input type="hidden" name="foobar" value="1" id="foobar"></dd>
非表示の要素がページのスペースを占有しないようにします。デフォルトのデコレータをすべて削除したいので、入力タグのみを残します。
<input type="hidden" name="foobar" value="1" id="foobar">
どうすればこれを達成できますか?
非表示フィールドの場合、必要なデコレーターは1つだけです-ViewHelper:
$field = new Zend_Form_Element_Hidden('id');
$field->setDecorators(array('ViewHelper'));
これにより、Dt-Ddラッパーとラベルなしで、入力フィールドのみがレンダリングされます。
Zend Element Decorators ドキュメントから:
デフォルトのデコレータをロードする必要はありません
デフォルトでは、デフォルトのデコレータはオブジェクトの初期化中にロードされます。これを無効にするには、コンストラクタに「disableLoadDefaultDecorators」オプションを渡します。
$element = new Zend_Form_Element('foo', array('disableLoadDefaultDecorators' => true) );
これを使う
$element->removeDecorator('DtDdWrapper');
特定の要素の周りのdt ddタグを取り除くため
//上記に基づく-隠された要素を$ thisフォームに追加する単純な関数
/**
* Add Hidden Element
* @param $field
* @param value
* @return nothing - adds hidden element
* */
public function addHid($field, $value){
$hiddenIdField = new Zend_Form_Element_Hidden($field);
$hiddenIdField->setValue($value)
->removeDecorator('label')
->removeDecorator('HtmlTag');
$this->addElement($hiddenIdField);
}
隠された入力がたくさんある場合のベストアンサーは次のとおりです。
$elements = $this->getElements();
foreach ($elements as $elem)
if ($elem instanceof Zend_Form_Element_Hidden)
$elem->removeDecorator('label')->removeDecorator('HtmlTag');
他の投稿で述べたように、setDisableLoadDefaultDecorators(true)
は既にロードされていると機能しません...しかしclearDecorators()
は機能します!
DisableLoadDefaultDecoratorsを正しく動作させることができませんでした。ここに私が思いついた解決策があります。
$hiddenIdField = new Zend_Form_Element_Hidden('id');
$hiddenIdField->setValue($portalId)
->removeDecorator('label')
->removeDecorator('HtmlTag');
HTMLでは、非表示フィールドは追加タグなしで表示されます。
...
<dt><label for="password" class="required">Password</label></dt>
<dd><input type="password" name="password" id="password" value="" /></dd>
<input type="hidden" name="id" value="1" id="id" />
...
まあ、2012年とまだ同じ問題。デコレータを削除すると、htmlは検証されません。それらを残すと、非表示の要素がスペースを占有します。すべてのプロジェクトで、CSSヘルパー.hiddenを使用しているため、<dd>
およびラベルの設定を解除します。
$element = new Zend_Form_Element_Hidden('foo', array('value' => 'bar'));
$element->removeDecorator('Label');
$element->getDecorator('HtmlTag')->setOption('class', 'hidden');
有効なhtml(5)、見栄えの良いフォーム。これは、隠しフィールドのカスタムデコレータにも使用できます。
[〜#〜] edit [〜#〜]
これは私がそれを自分のフォーム要素に入れる方法です:
class Exanto_Form_Element_Hidden extends Zend_Form_Element_Hidden
{
public function render(Zend_View_Interface $view = null)
{
$this->removeDecorator('Label');
$this->getDecorator('HtmlTag')->setOption('class', 'hidden');
return parent::render($view);
}
}
http://www.phpfreaks.com/forums/index.php?topic=225848. のtakeme2webからの提案
$ yourhiddenzendformelement-> setDecorators(array( 'ViewHelper'));
まだ<dl>
ラッパーを使用している場合、単一の「ViewHelper」デコレーターのみを使用すると、無効なマークアップが生成されます。 ZF-2718 で別のアプローチの概要を説明します。これにより、<dd>
でラップされたサブフォームに非表示フィールドが追加されます。
これを使って:
foreach ($this->getElements() as $element) {
$decorator = $element->getDecorator('label');
if (!$decorator) {
continue;
}
$decorator->removeOption('tag');
}