2010-08-01 4 views
0

Я пытаюсь добавить Zend_Form_Elements после переключателей в моей форме, но до сих пор я не мог этого сделать. Если бы кто-нибудь мог указать мне в правильном направлении, это было бы очень признательно. Форма должна быть отображена, как показано ниже:Zend_Form: добавить элементы в переключатели

(*) [____]% 

() [____]€ 

() [___] for [___] 

ответ

0

Используйте форму decorators и CSS, чтобы стиль ввода, как вы хотите.

Вы должны использовать forn decorator для перезаписи разметки для вашей формы. Но это довольно сложная задача, и, возможно, ваш лучший выбор - это форма viewScript. Там очень легко реализовать и дать вам 100% контроль над html для формы. Посмотрите на

Пример: Полная настройка Использование ViewScript декоратора

В примере я связан.

+0

Это невероятно расплывчатый ответ. Позаботьтесь о более точном? – Andy

0

Как о чем-то вроде этого:

class My_RadioForm extends Zend_Form 
{ 
    public function init() 
    { 
     $this->addElement('radio', 'myradio', array(
      'label' => 'Select an option below', 
      'multiOptions' => array(
       'val1' => 'Text 1', 
       'val2' => 'Text 2', 
       'val3' => 'Text 2', 
      ), 
     )); 
    } 

}

для очень специфической визуализации, @iznogood прав: нужно получить во все, что декоратор бизнес.

+0

Привет. Это в значительной степени код, который у меня уже есть. Проблема в том, что мне нужно вставлять элементы между итерациями, иначе это будет просто список переключателей. Если мне нужно попасть в декораторы, что мне нужно сделать? Добавить и/или удалить декораторы? Создать свой собственный? «Использовать декораторы» ужасно неспецифичен. – Andy

0

Вы можете использовать докораторы, если это только вопрос позиционирования входных тегов. Это можно сделать путем перезаписи/изменения стандартного декоратора FormElements, например, путем добавления свойства float: left style к определенному элементу формы. Продолжая пример Давида:

$this->addElement('radio', 'myradio', array(
     'label' => 'Select an option below', 
     'multiOptions' => array(
      'val1' => 'Text 1', 
      'val2' => 'Text 2', 
      'val3' => 'Text 2', 
     ), 
     'decorators' => 
      array(
      'ViewHelper', 
      'Errors', 
      'Description', 
      array('HtmlTag', array('tag' => 'dd', 'style' => 'float: left')), 
      'Label' 
     ) 
)); 

Существует также метод setDefaultDecorators(), что позволяет переписать все элементы декораторы во всей форме.

Более совершенное решение для создания составных элементов - http://weierophinney.net/matthew/archives/217-Creating-composite-elements.html - то есть элемент пользовательской формы, содержащий несколько входных тегов. Таким образом, у вас есть больший контроль над бизнес-логикой формы.

+0

Это совсем не то, чего я хочу. Мне нужен метод вставки элементов рядом с переключателями. Текущая реализация позволяет только вставлять метки (см. «Текст 1», «Текст 2» и т. Д. В вашем примере). Простое перемещение с CSS приведет к разрушению естественного потока страницы. – Andy

+1

Вы должны создать свои собственные составные элементы формы. – Ernest

Смежные вопросы