问题
Is there a way to add a "$" right before the <input>
for a Zend_Form element? (using standard ZF stuff would be great, of course).
EDIT: For example, if the html generated by Zend_Form for a cost
element is something like: (very simplified)
<label>Cost:</label>
<input type="text" name="cost" />
I'd like it to output this:
<label>Cost:</label>
$ <input type="text" name="cost" />
回答1:
You can use callback decorator to put whatever html you want in your elements:
For example in your case I could do:
$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'
));
This should result in the following html code:
<label for="el1" class="optional">Cost:</label>
$
<input type="text" name="el1" id="el1" value="" />
Hope this will be helfull or at least point you in the right direction.
回答2:
Using the AnyMarkup decorator, you could do something this:
$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.
));
As usual, be sure to register the namespace for the decorator with the form. So, if you use the class as named in the linked snippet My_Decorator_AnyMarkup
located in the file My/Decorator/AnyMarkup.php
on the include path, then you'd need something like:
$form->addElementPrefixPath('My_Decorator_', 'My/Decorator', 'decorator');
回答3:
You can add it as a description
$this->createElement('text', 'cost')
->setLabel('Cost:')
->setDescription('$');
And then configure element's decorators properly.
Upd:
Suggested element's decorators:
array(
'ViewHelper',
array('Description', array('placement' => Zend_Form_Decorator_Abstract::PREPEND, 'tag' => 'em'))
);
Note the placement option.
来源:https://stackoverflow.com/questions/5328529/adding-a-dollar-sign-to-a-text-field-in-zend-framework