Zend framework Zend Form-标签上的集合类';s dt

Zend framework Zend Form-标签上的集合类';s dt,zend-framework,forms,zend-form,Zend Framework,Forms,Zend Form,更新我能够通过创建一个自定义标签装饰器来实现这一点,它扩展了Zend/Form/decorator/Label.php。我向它添加了一个setTagClass()方法,并重写了render方法以创建包含所需类的标记。也许有一种更优雅的方法可以做到这一点,但这似乎是可行的 $element->addDecorators(array( 'ViewHelper', 'Description', 'Errors', array('HtmlTag', array('tag' => 'dd'

更新我能够通过创建一个自定义标签装饰器来实现这一点,它扩展了Zend/Form/decorator/Label.php。我向它添加了一个setTagClass()方法,并重写了render方法以创建包含所需类的标记。也许有一种更优雅的方法可以做到这一点,但这似乎是可行的

$element->addDecorators(array( 
'ViewHelper', 
'Description',
'Errors',
array('HtmlTag', array('tag' => 'dd', 'class' => $class )),
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class))
));
我正在寻找有关如何使用装饰器在标签的dt元素上设置类的信息。下面的第三行代码设置标签上的类,并将标签包装在dt标记中。我想知道如何在dt标记上设置类

$txtLangPrefOther = $this->createElement('text','langPrefOther');
$txtLangPrefOther->setLabel('Language Preference Other:'));
$txtLangPrefOther->getDecorator('Label')->setOptions(array('tag' => 'dt', 'class' => 'other'));
$element->addDecorators(array( 
'ViewHelper', 
'Description',
'Errors',
array('HtmlTag', array('tag' => 'dd', 'class' => $class )),
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class))
));
这会产生如下输出:

<dt id="langPrefOther-label">
   <label for="langPrefOther" class="other">Language Preference Other:</label>
</dt>

<dd id="langPrefOther-element">
   <input type="text" id="langPrefOther" name="langPrefOther" ">
</dd>
$element->addDecorators(array( 
'ViewHelper', 
'Description',
'Errors',
array('HtmlTag', array('tag' => 'dd', 'class' => $class )),
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class))
));

语言偏好其他:

因为它是一个表单修饰符而不是元素修饰符。试试这个:

$this->setDecorators(
array(
'FormElements',
array('HtmlTag', array('tag' => 'dl', 'class' => 'theclass')),
'Form'
));
$element->addDecorators(array( 
'ViewHelper', 
'Description',
'Errors',
array('HtmlTag', array('tag' => 'dd', 'class' => $class )),
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class))
));

可能有一种更简洁的方法可以做到这一点,但这里是我的定制装饰器(注意:您需要扩展Zend_Form_装饰器_Label类):

$element->addDecorators(array( 
'ViewHelper', 
'Description',
'Errors',
array('HtmlTag', array('tag' => 'dd', 'class' => $class )),
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class))
));

标签
装饰器有一个名为
tagClass
的属性

$element->addDecorators(array( 
'ViewHelper', 
'Description',
'Errors',
array('HtmlTag', array('tag' => 'dd', 'class' => $class )),
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class))
));
试试这个:

$element->addDecorators(array( 
'ViewHelper', 
'Description',
'Errors',
array('HtmlTag', array('tag' => 'dd', 'class' => $class )),
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class))
));

我只希望某些dt设置“other”类,而不是所有dt。因此,您可以使用jquery$(“#idOfFormElement”).closest('dt').addClass('className');或者你可以做$form->element->setDecorator('HtmlTag',array('tag'=>'dl',class=>'theclass'))是的,jquery可以工作,但我希望在Zend_表单中这样做。看起来默认标签decorator只允许你用一个标签括住标签,并且只允许你设置标签上的id。目前,我不知道如何在没有自定义装饰器的情况下向标记添加类。如果您不想麻烦定制装饰程序,jquery建议是解决这个问题的一个很好的方法。