2010-04-12 5 views
2

현재 양식에 스타일을 추가하기 위해 zend_decorators를 사용하고 있습니다. 나는 그것을하는 다른 방법이 있는지 궁금 해서요? 데코레이터를 작성하는 것은 약간 어렵습니다. 나는 된 div 및 CSS 스타일을 사용하여 캐주얼 한 사랑 :데코레이터를 사용하는 대신 zend_forms를 설계하는 더 좋은 방법이 있습니까?

<input type="submit" class="colorfulButton" > 

그것은 훨씬 간단을하기보다는 특정 제어를위한 장식을 설정하고 추가합니다. 이후 각 스타일 구현을위한 데코레이터를 생성하고 컨트롤과 함께 추가해야합니다. 트릭을 도우미에게 보여줄 것인가?

답변

3

몇 가지가 있습니다. 자신 만의 요소보기 도우미를 롤백 할 수 있습니다 (곧 추측 할 수 있습니다).

또는 ...이 (매우 기본적인 예)와 같은 형태의 viewscript을 사용할 수

class Your_Form extends Zend_Form 
{ 
    public function init() 
    { 
     $this->setDecorators(array(
      'PrepareElements', 
      array('ViewScript', array('viewScript' => 'path/to/viewscript.phtml')) 
     )); 

     // only use basic decorators for elements 
     $decorators = array(
      'ViewHelper', 
      'Label', 
      'Errors' 
     ); 

     // create some element 
     $someElement = new Zend_Form_Element_Text('someElement'); 
     // set the basic decorators for this element and set a css class 
     $someElement->setDecorators($decorators) 
        ->setAttrib('class', 'someCssClass'); 

     // add (potentially multiple) elements to this from 
     $this->addElements(array(
      $someElement 
     )); 

    } 
} 

가에 대한 standard decorators section about PrepareElements를 참조하십시오 형태의 PrepareElements의 장식 세트를 가지고 필요한 이유 ViewScript 데코레이터를 사용합니다. 그런 다음 viewscript에서

는 :

<? 
    // the form is available to the viewscript as $this->element 
    $form = $this->element; 
?> 
<!-- put whatever html you like in this script and render the basic element decorators seperately --> 
<div> 
    <? if($form->someElement->hasErrors()): ?> 
    <?= $form->someElement->renderErrors() ?> 
    <? endif; ?> 
    <?= $form->someElement->renderLabel(); ?> 
    <?= $form->someElement->renderViewHelper(); ?> 
</div> 
+0

감사합니다, 이것이 내가 필요한 것입니다. 건배 – Hanseh

1

폼 요소에 클래스 속성을 설정하려는 경우 데코레이터를 정의 할 필요가 없습니다. 이는 zend_form 요소의 몇 가지 표준 메소드를 사용하여 수행 할 수 있습니다.

은 설명서의 섹션 Metadata and Attributes에서 setAttrib() 방법을 참조하십시오, 거기 을 부여 년대 예 (인용) :

// Equivalent to $element->setAttrib('class', 'text'): 
$element->class = 'text; 


을 그리고 당신은 클래스를 설정할 수 있습니다 경우이 방법을 속성 폼의 요소를 구성하는 동안 또는 요소를 정의하는 .ini 파일에 설정할 수 있습니다. 페이지의 뒷 부분에있는 Configuration 섹션에 예제가 있습니다.

+0

나는 간단한 경우에 대한이 답변에 동의합니다. 그러나 우리가 일종의 디자인 복잡성이 있다면 어떨까요? 계층마다 다른 양식 요소와 함께 div를 계층화하는 것과 같습니다. – Hanseh

+0

이 (복잡한) 경우에는 데코레이터를 사용해야합니다. 그렇습니다. –

관련 문제