2011-03-11 5 views

답변

2

나는 당신의 문제를 해결하는 데 도움이 될한다 예를 준비했다. 여기있다 :

$form = new Zend_Form; 

    $form->removeDecorator('htmlTag'); 

    $form->setAction('/index/login') 
      ->setMethod('post') 
      ->setAttrib('id', 'login_form'); 

    $username = $form->createElement('text', 'username'); 

    $username->addValidator('alnum') 
      ->setRequired(TRUE) 
      ->setLabel('Username') 
      ->setAttrib('class', 'login_input'); 


    // anonymous function that will generate your image tag 
    $makeImg = function($content, $element, array $options) { 
       return '<img src="/images/' . $options['img'] . '" class="' . $options['class'] . ' " alt=""/> '; 
      }; 


    $username->setDecorators(array(
     'ViewHelper', 
     'Errors', 
     array('Label', array('class' => 'login_label')), 
     array('Callback', 
      array(
       'callback' => $makeImg, 
       'img' => 'user_icon.png', 
       'class' => 'login_icon',      
       'placement' => 'PREPEND' 
      ) 
     ), 
     array('HtmlTag', array('tag' => null, 'class' => 'input_row')), 
    )); 

    $form->addElement($username); 


    $submit = $form->createElement('submit', 'login', array(
       'label' => 'Login', 
       'class' => 'login_submit' 
        ) 
    ); 


    $submit->setDecorators(array(
     'ViewHelper', 
     'Errors', 
     array('HtmlTag', array('tag' => null, 'class' => 'input_row')), 
    )); 

    $form->addElement($submit); 

양식은 다음과 같은 HTML을 생성 (난 당신 Zend_Form 코드로 암호 필드를 생성하지 않았다 그것을 포함하지 않음) :

<form id="login_form" enctype="application/x-www-form-urlencoded" action="/index/login" method="post"> 
     <div class="input_row"> 
     <img src="/images/user_icon.png" class="login_icon " alt=""> 
     <label for="username" class="login_label required">Username</label> 
     <input type="text" name="username" id="username" value="" class="login_input"> 
     </div> 
     <div class="input_row"> 
     <input type="submit" name="login" id="login" value="Login" class="login_submit"> 
     </div> 
    </form> 

어떤 언급 할 가치 것은 내가 Callback 장식을 사용한다는 것입니다 . 이 데코레이터를 사용하면 양식에 사용자 정의 html을 삽입하는 데 사용할 수있는 모든 함수를 호출 할 수 있습니다. 이 예제에서 나는 $makeImg 변수에 할당 된 anonymous 함수를 만들었습니다 (이 경우 PHP 5.3이 필요하지만 PHP의 이전 버전에서는 create_function 함수도 사용 가능). 이 $makeImg 변수가 내 콜백입니다. 알 수 있듯이이 함수는 img HTML 태그를 생성합니다.

희망이 도움이 될 것입니다. 당신이 보여 완 여기에 당신이 HTML을 작성할 수 있습니다 추가 요소 세트 setDecorators 후 폼 장식

을 사용할 수 있습니다

+0

이전 버전의 PHP 및 zend 프레임 워크 1.5.3을 실행하고 있습니다. 당신의 예제에서 나는 이것을 얻었다 : $ makeImg = create_function ('$ content, $ element, array $ options', 'return "\"Image\""); – Michael

+0

하지만 오류가 발생합니다 : 경고 : substr_compare() [function.substr-compare] : 시작 위치는 Zend/Form.php의 2207 – Michael

+0

@Michael에서 초기 문자열 길이를 초과 할 수 없습니다. ZF 1.11 있습니다. 따라서 1.5를 사용하면 문제가 될 수 있습니다. 불행히도 ZF 1.5에서 작동시키는 법을 모르겠습니다. – Marcin

0

.

$this->addElements(array( 
      $id, 
      $group_id, 
      $content_name, 
      $title, 
      $content, 
      $tags, 
      $status, 
      $Publish 
     )); 

     $this->setDecorators(array(array('viewScript', array('viewScript' => 'admin/articleFormDecorator.phtml'))));