1

我几乎疯了试图在Zend_Form中完成这个自动化表单,我已经做了几乎所有事情,并且都感谢Stackoverflow社区。这里是我想要做的,我会尽力让自己清楚(我很难解释我自己-_-''):Zend Form + Twitter bootstrap:创建2个跨度以显示相同的表格

我已经做了: 包装每个元素标签和输入里面一个div ,并且每个人都有一个合适的Twitter span类来填充高级div,并且表单本身会接收一组数据并自动生成数据。

我需要什么: 我的上司事业部是跨度:12(布局) 我需要的内容有2个“跨度:6”的div,每个div来持有相同形式的部件。

解决方案我凸轮了:

我的一个解决方案是单独获取每个元素,并手动将每个span6股利。另一个是在我的函数中创建一个'容器'参数,所以生成器可以做到这一点(但我不知道如何创建两个div与span类和追加在各自的元素)

我希望你人才能理解我想要做的,我需要什么,感谢=)

form/Usuario: 

<?php 
class Admin_Form_Usuario extends Zene_Form_Helper_Abstract 
{ 
    protected $campo = null; 
    /** 
    * Initialize form (used by extending classes) 
    * 
    * @return void 
    */ 

    public function init() 
    { 

     //Valores dos Campos 
     $model = new Admin_Model_Usuario(); 
     $option = $model->getOptions(); 


     $modelPage = new Admin_Model_Page(); 
     $optionPage = $modelPage->getOptions(); 

     //Atributos dos Campos 
     $this->campo = array(
       array('Tipo'=>'Text', 'Id'=>'UsuId',   'Label'=>'Código do Usuário', 'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'UsuId','Atributo'=>array('readonly'=>'true')), 
       array('Tipo'=>'Select', 'Id'=>'UsuFunId',  'Label'=>'Funcionário',   'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'UsuFunId','Option'=>array(1=>'Guest',2=>'Charles')), 
       array('Tipo'=>'Text', 'Id'=>'UsuLogin',  'Label'=>'Login do Usuário', 'Span' =>'12', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'UsuId'), 
       array('Tipo'=>'Pass', 'Id'=>'UsuSenha',  'Label'=>'Senha Usuário',  'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'UsuSenha'), 
       array('Tipo'=>'Pass', 'Id'=>'ConfUsuSenha', 'Label'=>'Confirmar Senha',  'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'ConfUsuSenha'), 
       array('Tipo'=>'Check', 'Id'=>'full_permission','Label'=>'Permissão Total',  'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'full_permission'), 
       array('Tipo'=>'Check', 'Id'=>'UsuAtivo',  'Label'=>'Ativo',    'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'UsuAtivo'), 
       array('Tipo'=>'Date', 'Id'=>'UsuDtAtivo',  'Label'=>'Data ativação',  'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'UsuDtAtivo','Atributo'=>array('readonly'=>'true')), 
       array('Tipo'=>'Date', 'Id'=>'UsuDtDesativo', 'Label'=>'Data Desativação', 'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'UsuDtDesativo','Atributo'=>array('readonly'=>'true')), 
       array('Tipo'=>'Select', 'Id'=>'Parent_id',  'Label'=>'Grupo',    'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'Parent_id','Option'=>$option), 
       //array('Tipo'=>'MSelect','Id'=>'Parent_id', 'Label'=>'Grupo',    'Span' =>'6', 'Required'=>'true', 'Table'=>'Usuario','Field'=>'Parent_id','Option'=>$option), 
       array('Tipo'=>'Submit', 'Id'=>'save',   'Label'=>'Salvar',    'Span' =>'12' ) 
     ); 

     parent::createElemento($this->campo); 

    } 


Helper Abstract (gera o form) e o executa o `parent::createElemento()` 
<?php 
abstract class Zene_Form_Helper_Abstract extends Zend_Form{ 
    /** 
    * Metodo para retornar um lemento criado apartir de um array 
    * deve seguir a seguinte estrutura; 
    * @see Zend_Form::getElement() 
    */ 
    public function createElemento(array $options){ 

     $element = null; 
     foreach ($options as $option) 
     { 
      switch ($option['Tipo']) { 
       case 'Hidden': 
        $element = new Zend_Form_Element_Hidden($option['Id']); 
        break; 
       case 'Select': 
        $element = new Zend_Form_Element_Select($option['Id']); 
        $element->addMultiOptions($option['Option']); 
        break; 
       case 'Date': 
        $element = new Zend_Form_Element_Text($option['Id']); 
        $element->setAttrib("class", "datepicker"); 
        break; 
       case 'Check': 
        $element = new Zend_Form_Element_Checkbox($option['Id']); 
        break; 
       case 'MCheck': 
        $element = new Zend_Form_Element_MultiCheckbox($option['Id']); 
        $element->addMultiOptions($option['Option']); 
        break; 
       case 'Text': 
        $element = new Zend_Form_Element_Text($option['Id']); 
        break; 
       case 'Pass': 
        $element = new Zend_Form_Element_Password($option['Id']); 
        break; 
       case 'Checkbox': 
        $element = new Zend_Form_Element_Checkbox($option['Id']); 
        break; 
       case 'Textarea': 
        $element = new Zend_Form_Element_Textarea($option['Id']); 
        break; 
       case 'MSelect': 
        $element = new Zend_Form_Element_Multiselect($option['Id']); 
        $element->addMultiOptions($option['Option']); 
        break; 
       case 'Submit': 
        $elementDecorator = array(
          array('ViewHelper'), 
          array('HtmlTag', array('tag' => 'div','style' =>'margin-left:0', 'class' => 'span'.$option['Span'])), 
        ); 
        $element = new Zend_Form_Element_Button($option['Id']); 
        $element->setLabel($option['Label']) 
        ->setAttrib('type','submit') 
        ->setAttrib('class','btn btn-primary') 
        ->setDecorators($elementDecorator); 
        break; 
       default: 
        break; 
      } 
      $elementDecorator = array(
        array('ViewHelper'), 
        array('Label'), 
        array('HtmlTag', array('tag' => 'div','style' =>'margin-left:0', 'class' => 'span'.$option['Span'])), 
      ); 

      if(isset($option['Atributo'])){ 
       foreach ($option['Atributo'] as $key=>$value) { 
        $element->setAttrib($key, $value); 
       } 
      } 

      if(($option['Tipo'] != 'Submit') && ($option['Tipo'] != 'Button')){ 
       $element->setLabel($option['Label']) 
       ->setAllowEmpty((bool)$option['Required']) 
       ->setRequired(!$option['Required']) 
       ->addValidator('Db_NoRecordExists', false, 
         array(
           'table' => $option['Table'], 
           'field' => $option['Field'] 
         ) 
       )->setDecorators($elementDecorator); 

       if ($option['Disabled'] == 'true') 
        $element->setAttrib('disabled','disabled'); 
      } 

     $this->addElement($element); 

     } 
    } 


no usuario/controller: 


    $form = new Admin_Form_Usuario(); 

no usuario/view: 

    $this->view->form = $form; 
+0

请编辑您的问题,包括当前正在得到,b)您想要标记的例子标记的)例子,以及c)你用得到) –

+0

做了装饰的例子,因为我尝试了很多次来编辑它,并且他没有允许我因为一些未经编辑的代码,所以我选择了所有内容并将其作为单个代码 – Demetrio

回答

1

,如果你想BT形式,您就可以使用ViewScript装饰,或somting这样

$pro_name = new Zend_Form_Element_Text('pro_name'); 
    $pro_name->setLabel("Project name") 
      ->setRequired(true) 
      ->addValidators(array($pnalnum,$pnlength)) 
      ->setAttrib("class", "textInput") 
      ->setDecorators(array(
       'ViewHelper', 
       array(array('control' => 'HtmlTag'), array('tag' => 'div', 'class' => 'controls')), 
       array('Label', array('class' => 'control-label')), 
       array(array('controls' => 'HtmlTag'), array('tag' => 'div', 'class' => 'control-group')) 
      )); 

这很简单创建html:

<div class="control-group"> 
    <label for="pro_name" class="control-label required">Project name</label> 
    <div class="controls"> 
     <input type="text" name="pro_name" id="pro_name" value=""class="textInput"> 
    </div> 
</div> 
+0

已经这样做了,问题在于放置由特定div围绕的少量元素,并且另一个div由另一个elementes,我需要这样做,因为这些内容必须在同一个表格内 – Demetrio