Добавление знака доллара в текстовое поле в Zend Framework - PullRequest
1 голос
/ 16 марта 2011

Есть ли способ добавить "$" прямо перед <input> для элемента Zend_Form? (конечно, было бы неплохо использовать стандартный материал ZF).

EDIT : Например, если html, сгенерированный Zend_Form для элемента cost, выглядит примерно так: (очень упрощенно)

<label>Cost:</label>
<input type="text" name="cost" />

Я бы хотел вывести это:

<label>Cost:</label>
$ <input type="text" name="cost" />

Ответы [ 3 ]

3 голосов
/ 16 марта 2011

Используя декоратор 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');

3 голосов
/ 17 марта 2011

Вы можете использовать callback decorator, чтобы поместить любой 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="" /> 

Надеюсь, это будет полезно или, по крайней мере, укажет вам правильное направление.

1 голос
/ 16 марта 2011

Вы можете добавить его как описание

$this->createElement('text', 'cost')
     ->setLabel('Cost:')
     ->setDescription('$');

И затем правильно настроить декораторы элемента.

Upd:

Предлагаемые декораторы элемента:

array(
    'ViewHelper',
    array('Description', array('placement' => Zend_Form_Decorator_Abstract::PREPEND, 'tag' => 'em'))
);

Обратите внимание на вариант размещения.

...