2013-09-16 2 views
3

Отработанные часы, ползущие через Google, мне нужно реализовать jQuery Button в списке флажков, проблема у меня есть, когда я вывожу элемент формы, код вставляет INPUT внутри, и мне это нужно вне этикетки. Вот как это выводит:Zend form checkbox label перед входом

<label for="checkbox-1"><input type="checkbox" name="checkbox[]" id="checkbox-1" value="1" checked="checked">3DCrafter</label> 

Вот мой элемент формы с декораторами:

$checkbox->addMultiOption($prev,$p); 
     $checkbox->setAttrib('id', 'checkbox'); 
     $checkbox->setSeparator(' '); 
     $checkbox->setDecorators(array(
      array('ViewHelper'), 
      array('Errors', array('tag' => 'div', 'class' => 'error')), 
      array('Label', array('tag' => 'span')), 
      array('HtmlTag', array('tag' => 'div', 'class' => 'label')), 
     )); 

Вот как я вывода элемента формы:

<?php echo $this->formSoftware->checkbox;?> 

Кто-нибудь есть какие-либо идеи, как сделай это? Или используйте кнопку jQuery на флажке в Zend?

+0

Не могли бы вы добавить ожидаемый вывод html, который вам нужен? – Songo

ответ

1

Один (не очень приятно) решением является использование JQuery для настройки DOM, как ожидалось:

//HTML 
//the checkboxes are children of their associated label 
<div id="container"> 
    <label for="cb1"><input type="checkbox" id="cb1" name="cb1" />Checkbox 1</label> 
    <label for="cb2"><input type="checkbox" id="cb2" name="cb2" checked="checked" />Checkbox 2</label> 
    <label for="cb3"><input type="checkbox" id="cb3" name="cb3" />Checkbox 3</label> 
</div> 

//javascript 
//for each label : find its target input among its descendants, 
//and place it before the label 
$('#container').find('label').each(function() { 
    var id = $(this).attr('for'); 
    $(this).find('#' + id).insertBefore(this); 
}); 

$('#container').buttonset(); 

fiddle

+0

Лучшие вещи !!!! Работает благодаря очарованию! Ой и извините за поздний ответ! –

0

Если вы используете ZF1, я предлагаю вам создать собственный класс Decorator, который extends Zend_Form_Decorator_Abstract и зарегистрировать путь к вашим пользовательским декораторам, добавив addElementPrefixPath в вашу форму.

Вашему пользовательскому декоратору понадобится метод render() для вывода нужной разметки.

Не знаете, как это работает на ZF2.

0

По умолчанию декоратор Label добавляет к предоставленному контенту; Это можно контролировать, указав один из следующих вариантов «размещения»:

PREPEND: визуализируйте этикетку перед контентом.

APPEND: визуализируйте этикетку после содержимого.

IMPLICIT_PREPEND: визуализируйте элемент внутри метки, помещая текст ярлыка перед контентом.

IMPLICIT_APPEND: визуализируйте элемент внутри метки этикетки, разместив текст этикетки после содержимого.

Так что в вашем случае, я думаю, что вы хотите PREPEND:

$checkbox->addMultiOption($prev,$p); 
     $checkbox->setAttrib('id', 'checkbox'); 
     $checkbox->setSeparator(' '); 
     $checkbox->setDecorators(array(
      array('ViewHelper'), 
      array('Errors', array('tag' => 'div', 'class' => 'error')), 
      array('Label', array('tag' => 'span', 'placement' => 'PREPEND')), 
      array('HtmlTag', array('tag' => 'div', 'class' => 'label')), 
     )); 
+0

Спасибо за предложение, я добавляю код, и он по-прежнему помещает ввод между ярлыком печально. –

0

Здесь метод getLabel() поможет вам распечатать ярлык.

<?php echo $this->formSoftware->checkbox->getLabel();?> 
<?php echo $this->formSoftware->checkbox;?>