Zend_Form файловый разделитель полей - PullRequest
2 голосов
/ 23 ноября 2011

У меня проблемы с формированием макета формы так, как я хочу, чтобы он выглядел.Проблема здесь не в декорировании самого элемента файла, проблема в функции: $file->setMultiFile(3).Кажется, я не могу поместить разделитель между несколькими элементами ввода файлов, заставляя их размещаться в строке позади друг друга.

Вот как я создаю элемент:

$oElement = new Zend_Form_Element_File('file');
$oElement->setLabel('File')
    ->setMultiFile(3)
    ->setDestination('location on server');
$this->addElement($oElement);

Затемпозже я добавлю декораторы:

$this->getElement('file')->setDecorators(array(
    'File',
    'Errors',
     array(array('td' => 'HtmlTag'), array('tag' => 'td')),
     array('Label', array('tag' => 'td')),
     array(array('tr' => 'HtmlTag'), array('tag' => 'tr'))
));

Текущий вывод:

<tr>
    <td id="file-label">
        <label class="optional" for="file">File</label>
    </td>
    <td>
        <input type="file" id="file-0" name="file[]">
        <input type="file" id="file-1" name="file[]">
        <input type="file" id="file-2" name="file[]">
    </td>
</tr>

Я хочу, чтобы между элементами ввода было <br />, чтобы они не помещались наодин ряд.Это возможно через декораторы?В радио / mutliselect / multicheckbox есть функция setSeparator, которая сделает это, но, похоже, это не относится к элементу file.

Может кто-нибудь помочь мне здесь?Заранее спасибо,

Илиан

1 Ответ

2 голосов
/ 23 ноября 2011

Это может быть немного обманом, но следующее должно работать для вас:

$fd = $oElement->getDecorator('File');

$fd->setOption('placement', 'PREPEND')
   ->setOption('separator', '<br />');

Вы можете разместить этот код после добавления элемента в форму и изменения декораторов.

В методе render ()

Zend_Form_Decorator_File при создании разметки используется разделитель, но он не позволяет установить его. Настройки размещения и разделителя занесены в черный список, но, используя описанный выше трюк, вы можете установить их в любом случае.

В Zend_Form_Decorator_File render ():

$separator = $this->getSeparator();
$placement = $this->getPlacement();
//...

// in a loop, create the array of input elements
$markup[] = $view->formFile($name, $htmlAttribs);

//...
// join each file element by separator, which cannot be set with setSeparator()
$markup = implode($separator, $markup);

Я должен был установить для PREPEND размещение, в противном случае он сделал <br />*file input*<br />*file input*<br />*file input* при использовании APPEND.

Надеюсь, это поможет.

...