我想更改为复选框的渲染。默认情况下,就是这样:
<dt><label>%name%</label></dt>
<dd>%element% %error %description%</dd>
我想要以下内容(有点像multiCheckbox):
<dt> </dt>
<dd><label>%element% %name</label> %error% %description%</dd>
我用{覆盖Zend_Form_Element::loadDefaultDecorators()
My_Form_Element_Checkbox::loadDefaultDecorators()
所以这适用于所有人
正在使用的复选框。
我不能让这个工作。我试图交换一些装饰器的顺序,但是
ESP。
内的<dt>
似乎难以修复。我怎样才能做到这一点?
顺便说一句,默认情况下,链条看起来像这样:
$this->addDecorator('ViewHelper')
->addDecorator('Errors')
->addDecorator('Description', array('tag' => 'p', 'class' => 'description'))
->addDecorator('HtmlTag', array('tag' => 'dd',
'id' => $this->getName() . '-element'))
->addDecorator('Label', array('tag' => 'dt'));
答案 0 :(得分:1)
要使用空dt前置,就像许多装饰器问题一样,可以使用像AnyMarkup这样的自定义装饰器来解决它,它允许在表单的任何位置插入任意标记。
只需将您的标签替换为:
->addDecorator(
'AnyMarkup',
array('markup' => '<dt> </dt>', 'placement' => 'prepend')
)
但是,为了将元素放在标签中,您必须编写自定义装饰器。这样的事情(未经测试):
class My_Decorator extends Zend_Form_Decorator_Abstract {
public function render($content) {
return '<label>' . $content . $this->getElement()->getLabel()
. '</label>';
}
}
答案 1 :(得分:0)
如果你想知道,这就是我提出的:
文件应用/表格/元素/ Checkbox.php
<?php
class App_Form_Element_Checkbox extends Zend_Form_Element_Checkbox
{
public function loadDefaultDecorators()
{
if ($this->loadDefaultDecoratorsIsDisabled())
{
return $this;
}
$this->addPrefixPath("App_Form_Decorator", "App/Form/Decorator", "decorator");
$getId = create_function('$decorator',
'return $decorator->getElement()->getId()
. "-element";');
$this->addDecorator('ViewHelper')
->addDecorator('Errors')
->addDecorator('Checkbox')
->addDecorator('Description', array('tag' => 'p', 'class' => 'description', "placement" => "prepend"))
->addDecorator('HtmlTag', array('tag' => 'dd', 'id' => array('callback' => $getId)))
->addDecorator('AnyMarkup', array('markup' => '<dt id="'.$this->getId().'-label"> </dt>', 'placement' => 'prepend'));
return $this;
}
}
文件App / Form / Decoratpr / Checkbox.php
<?php
class App_Form_Decorator_Checkbox extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
return '<label for="'.$this->getElement()->getId().'">' . $content . ' ' . $this->getElement()->getLabel()
. '</label>';
}
}
文件App / Form / Decorator / AnyMarkup.php
<?php
class App_Form_Decorator_AnyMarkup extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
$placement = $this->getPlacement();
$separator = $this->getSeparator();
switch ($placement)
{
case self::PREPEND:
return $this->_options['markup'] . $separator . $content;
case self::APPEND:
default:
return $content . $separator . $this->_options['markup'];
}
}
}