2013-06-03 1 views
0

사실 젠드 프레임 워크 2가 양식 요소 용 HTML을 생성하는 방법을 이해할 수 없습니다.젠드 프레임 워크 2 폼에서 체크 박스 그룹을 커스터마이징하는 방법은 무엇입니까?

<label><input type="checkbox" value="1" name="others[]">Contacts</label> 
<label><input type="checkbox" value="2" name="others[]">Who viewd my profile</label> 

그러나 나는 다음과 같이 HTML을해야 - - 예를 들어,

$others = new Element\MultiCheckbox('others'); 
$others->setLabel('Others') 
     ->setAttribute('name', 'others'); 
$others->setValueOptions(array(
    '1' => 'Contacts', 
    '2' => 'Who viewd my profile' 
)); 

이 코드는 생성 어떻게, 내가 생성 된 HTML을 변경하려는 경우 그래서

<input type="checkbox" value="1" name="others[]"><label>Contacts</label> 
<input type="checkbox" value="2" name="others[]"><label>Who viewd my profile</label> 

내가한다?

+0

http://stackoverflow.com/questions/13931834/ zend-framework-2-form-element-decorators – Orangepill

+0

나는 체크했으나 여전히 체크 박스 그룹에 대한 해결책을 얻지 못했다. 일부는 사용자 정의 할 수 있지만 확인란 그룹은 사용할 수 없습니다. echo $ this-> formElement ($ elements [ 'others']);를 작성할 때; 항상 그 코드 그룹을 생성합니다. –

+0

아마도'$ others-> setAttribute ('name', 'others') -> setLabel ('Others'); ' – Amir

답변

2

이러한 종류의 기능을 사용하려면 Zend\Form\View\Helper\MultiCheckbox을 덮어 쓰거나 더 정확하게는 renderOptions() 기능을 사용해야합니다.

그러면 ViewHelperManager$this->formMultiCheckbox()이 자신 만의 ViewHelper을 호출하여 원하는 결과를 얻도록해야합니다.

그러나 나는 당신이하려는 일이 크게 낙담된다고 언급하고 싶습니다. 사용자는 반드시 라벨을 클릭 할 수 있어야합니다! 마크 업을 변경하려면 적어도 다음과 같이하십시오.

<input type="checkbox" value="1" name="others[]" id="cbOthers1"><label for="cbOthers2">Foo</label> 
<input type="checkbox" value="2" name="others[]" id="cbOthers1"><label for="cbOthers2">Bar</label> 

응용 프로그램의 유용성을 잊지 마십시오! 또 다른 힌트 : CB 내부에 레이블을 넣으면 스타일 지정과 관련하여 브라우저를 지원하는만큼 자동으로 훨씬 더 많은 잠재 고객을 확보 할 수 있습니다. 그럼에도 불구하고, 모든 것이 당신에게 달려 있습니다. 당신은 자신의 ViewHelper 자신을 작성해야합니다.

PS : 당신의 ViewHelper, 당신은 단지 다음에 those lines을 덮어 쓰기해야합니다 아주 쉬운 것입니다 : 이것은 당신을 도울 수

switch ($labelPosition) { 
    case self::LABEL_PREPEND: 
     $template = $labelOpen . '%s'. $labelClose .'%s'; 
     $markup = sprintf($template, $label, $input); 
    break; 
    case self::LABEL_APPEND: 
    default: 
     $template = '%s' . $labelOpen . '%s'. $labelClose; 
     $markup = sprintf($template, $input, $label); 
     break; 
}