2012-01-05 5 views
0

를 통해 설정 한 ID 또는 클래스 중 하나를 필요로 내가 가지고 Zend_Config_Ini에서 다음과 같은 기본 장식은 내 양식 설정하려면 :젠드 양식 요소 행 Zend_Config_Ini

elementDecorators.viewHelper.decorator = "ViewHelper" 
elementDecorators.label.decorator = "Label" 
elementDecorators.errors.decorator = "Errors" 
elementDecorators.htmlTag.decorator = "HtmlTag" 
elementDecorators.htmlTag.options.tag = "li" 

내가 가지고있는 Zend_Config_Ini에서 또한 다음과 같은 요소 정의 :

elements.username.type = "text" 
elements.username.options.label = "Username:" 
elements.username.options.required = true 

다음과 같은 출력이 생성된다 :

<li> 
    <label for="username" class="required">Username:</label> 
    <input type="text" name="username" id="username" value="" /> 
</li> 

지금 WH 내가 알아야 할 것은 어떻게해야합니까 (ini 설정 파일을 통해 선호), LI 태그의 ID 또는 클래스를 설정합니까? 나는 다음과 같은 출력을 싶습니다

<li id="form-username-element"> ... </li> 

또는

<li class="form-2col"> ... </li> 

업데이트 :

elements.username.options.decorators.viewHelper.decorator = "ViewHelper" 
elements.username.options.decorators.label.decorator = "Label" 
elements.username.options.decorators.errors.decorator = "Errors" 
elements.username.options.decorators.htmlTag.decorator = "HtmlTag" 
elements.username.options.decorators.htmlTag.options.tag = "li" 
elements.username.options.decorators.htmlTag.options.class = "username-row-element" 
을 : 나는 이런 식으로 자신을 config (설정) 요소의 모든 장식을 재정 의하여 그것을 얻을 수 있었다

그렇다면 작동합니다. 그러나 모든 요소로 이동해야하는 많은 중복을 만듭니다 (단 하나의 변경으로 f는 클래스 설정 자체가되는 마지막 줄). 그래서 지금 내가 궁금해하는 것은 ini 파일에서 각 요소의 모든 데코레이터를 복제하는 대신 기본 데코레이터를 사용하여 클래스 이름을 재정의하는 방법이 있습니까?

답변

0

가장 쉬운 일은 자신 만의 장식자를 만드는 것입니다. 예를 들어, 각 요소를 div로 래핑하고 필요한 클래스와 ID를 추가하는 ElementWrap 데코레이터를 만들었습니다. 다음과 같이 표시 될 수 있습니다.

class Form_Decorator_ElementWrap extends Zend_Form_Decorator_Abstract 
{ 
    public function render($content) 
    { 
     $element = $this->getElement(); 
     if($this->getOption('openOnly')) { 
      return '<div class="'.$this->getClass().'" id="'.$this->getId().'">' . $content; 
     } else if($this->getOption('closeOnly')) { 
      return $content . PHP_EOL . '</div>' . PHP_EOL; 
     } else { 
      return '<div class="'.$this->getClass().'" id="'.$this->getId().'">' . $content . '</div>'; 
     } 
    } 

    public function getClass() 
    { 
     $element = $this->getElement(); 
     $classes = array(
      'field_wrap', 
      'field_' . strtolower(substr(strrchr($element->getType(), '_'), 1)), 
      $this->getOption('class'), 
     ); 
     if($element->hasErrors()) { 
      $classes[] = 'field_error'; 
     } 
     if($elementClass = $element->getAttrib('class')) { 
      $classes[] = $elementClass; 
     } 
     return implode(' ', array_filter($classes)); 
    } 

    public function getId() 
    { 
     return 'fieldwrap-' . $element->getId(); 
    } 
}