有没有办法在<input>
之前为Zend_Form元素添加“$”? (当然,使用标准ZF的东西会很棒。)
编辑:例如,如果Zend_Form为cost
元素生成的html类似于:(非常简化)
<label>Cost:</label>
<input type="text" name="cost" />
我希望输出这个:
<label>Cost:</label>
$ <input type="text" name="cost" />
答案 0 :(得分:3)
使用AnyMarkup装饰器,您可以执行以下操作:
$element->setDecorators(array(
'ViewHelper',
array('AnyMarkup', array('markup' => '$', 'placement' => 'prepend')),
// And any other decorators, like Label, Description, Errors, and
// other wrapping like td, tr, etc.
));
像往常一样,请务必使用表单注册装饰器的命名空间。因此,如果您使用位于包含路径上文件My_Decorator_AnyMarkup
中的链接代码段My/Decorator/AnyMarkup.php
中指定的类,那么您需要以下内容:
$form->addElementPrefixPath('My_Decorator_', 'My/Decorator', 'decorator');
答案 1 :(得分:3)
你可以使用callback装饰器在你的元素中放置你想要的任何html:
例如,在你的情况下,我可以这样做:
$el1 = $this->createElement('text', 'el1')->setLabel('Cost:');
// Anonymous function that will generate your custom html (needs PHP 5.3).
// For older PHP there are other ways of making anonymous functions.
$myHtml = function($content, $element, array $options) {
return '$';
};
$el1->setDecorators(array(
'ViewHelper',
'Errors',
array('Callback', array('callback' => $myHtml, 'placement' => 'PREPEND')),
'Label'
));
这应该会产生以下html代码:
<label for="el1" class="optional">Cost:</label>
$
<input type="text" name="el1" id="el1" value="" />
希望这将是有帮助的,或至少指出你正确的方向。
答案 2 :(得分:1)
您可以将其添加为说明
$this->createElement('text', 'cost')
->setLabel('Cost:')
->setDescription('$');
然后正确配置元素的装饰器。
<强> UPD:强>
推荐元素的装饰者:
array(
'ViewHelper',
array('Description', array('placement' => Zend_Form_Decorator_Abstract::PREPEND, 'tag' => 'em'))
);
请注意展示位置选项。