2013-03-01 82 views
0

我需要的HTML表单象下面这样:Zend:我如何使用setDecorators()创建自定义表单元素?

<form> 
<div class="es_form_txt">Name</div> 
<div class="es_form"><input type="text" value="" class="email1"></div> 
<div class="clear1"></div> 
<div class="es_form_txt">Gender</div> 
<div class="es_form"> 
    <input type="radio" value="" name=""> Male 
    <input type="radio" value="" name=""> Female 
    <input type="radio" value="" name=""> Other 
</div> 
<div class="clear1"></div> 
<div class="es_form_txt">Country Code</div> 
<div class="es_form"><input type="text" value="" class="email1"></div> 
<div class="clear1"></div> 
<div class="es_form_txt">Phone</div> 
<div class="es_form"><input type="text" value="" class="email1"></div> 
<div class="clear1"></div> 
<div class="clear1"></div> 
<div class="es_form">&nbsp;</div> 
<div class="es_form"><input type="button" class="button" value="Update"></div> 
<div class="clear"></div> 
</form> 

我试过各种解决方案,这里没有工作!任何人都可以指向正确的方向吗?

回答

1

我发现当我需要使用Zend_Form时需要显示特定的HTML时,最可靠的解决方案通常是使用ViewScript decorator

使用Zend_Form构建一个标准表单。

<?php 
//application/forms/Search.php 
class Application_Form_Search extends Zend_Form 
{ 
    public function init() 
    { 
     $this->setMethod('POST'); 
     //assign the view script to the decorator, this can also be done in the controller 
     $this->setDecorators(array(
      array('ViewScript', array(
        'viewScript' => '_searchForm.phtml' 
      )) 
     )); 
     // create new element 
     $query = $this->createElement('text', 'query'); 
     // element options 
     $query->setLabel('Search Keywords'); 
     // add the element to the form 
     $this->addElement($query); 
     //submit element 
     $submit = $this->createElement('submit', 'search'); 
     $submit->setLabel('Search Site'); 
     $submit->setDecorators(array('ViewHelper')); 
     $this->addElement($submit); 
    } 
} 

然后构建用于呈现表单的实际脚本。

<!-- ~/views/scripts/_searchForm.phtml --> 
<article class="search"> 
    <!-- set the action and the method --> 
    <form action="<?php echo $this->element->getAction()?>" method="<?php echo $this->element->getMethod()?>"> 
     <table> 
      <tr> 
       <!-- you can render individual decorators. --> 
       <th><?php echo $this->element->query->renderLabel()?></th> 
      </tr> 
      <tr> 
       <td><?php echo $this->element->query->renderViewHelper()?></td> 
      </tr> 
      <tr> 
       <!-- or you can render a complete element --> 
       <td><?php echo $this->element->search?></td> 
      </tr> 
     </table> 
    </form> 
</article> 

这目前呈现为:

<article class="search"> 
    <form action="/video/index/display" method="post"> 
     <table> 
      <tr> 
       <th> 
        <dt id="query-label"> 
         <label for="query" class="optional">Search Keywords</label> 
        </dt> 
       </th> 
      </tr> 
      <tr> 
       <td> 
        <input type="text" name="query" id="query" value="" placeholder="Movie Title" size="20"> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <input type="submit" name="search" id="search" value="Search Video Collection!"> 
       </td> 
      </tr> 
     </table> 
    </form> 
</article> 

一些实验将需要得到正是你所需要的输出。

+0

这是伟大的,但我想知道如果它的良好做法,在我的视图文件中有php代码 - 我真的不喜欢它。无论如何,你的是一个快速解决方案:) – VishwaKumar 2013-03-01 10:26:07

+0

有没有办法避免在视图文件中的PHP,这就是为什么他们是.phtml(PHP的HTML)。如果你愿意的话,你可以使用一个单独的模板系统,但是对于很少的奖励来说这可能是一个很大的努力。 – RockyFord 2013-03-02 06:10:18

相关问题