Текст вокруг элемента в Zend_Form - PullRequest
2 голосов
/ 09 марта 2012

Итак, я создал простой Zend_Form, и я хотел бы отобразить один из его элементов следующим образом:

Label:      text [input] text2

Я использовал LabelDecorator для успешного добавления метки и даже могу использовать DescriptionDecorator длядобавить text1 или text2 в качестве описания, но я не мог понять, как добавить их обоих.Я знаю, что могу добавить два описателя-декоратора, один с добавлением и один с добавлением, но оба они имеют одинаковое содержимое.

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Я закончил тем, что создал собственный декоратор формы:

<?php
/** Zend_Form_Decorator_Abstract */
require_once 'Zend/Form/Decorator/Abstract.php';

class Zend_Form_Decorator_Surrounded extends Zend_Form_Decorator_Abstract
{
    /**
     * Render element
     *
     * @param  string $content
     * @return string
     */
    public function render($content)
    {
        $options   = $this->getOptions();
        if(!isset($options['text'])) return $content;

        return sprintf($options['text'], $content);
    }
}
?>

И я использую это так:

<?php
$element->setDecorators(array(
    'ViewHelper', 
    'Errors',
    array('Surrounded', array('text' => 'text1 %s text2')),
    'HtmlTag',
));
?>

Как вы думаете, это хорошее решение, есть ли недостаткииз этого?

0 голосов
/ 10 марта 2012

Вы можете создать свой собственный декоратор:

class My_Form_Decorator_PlainText extends Zend_Form_Decorator_Abstract
{
    public function render($content)
    {
        return $content . $this->getOption('text');
    }
}

и затем добавьте этот декоратор несколько раз:

$this->addElement($this->createElement('text', 'fieldname')
        ->setLabel('Label')
        ->addPrefixPath('My_Form', 'My/Form/')
        ->setDecorators(array(
            'Label',
            array(array('before'=>'PlainText'), array('text' => 'hello')),
            'ViewHelper',
            array(array('after'=>'PlainText'), array('text' => 'world')),
        )));
...