我几乎疯了试图在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;
请编辑您的问题,包括当前正在得到,b)您想要标记的例子标记的)例子,以及c)你用得到) –
做了装饰的例子,因为我尝试了很多次来编辑它,并且他没有允许我因为一些未经编辑的代码,所以我选择了所有内容并将其作为单个代码 – Demetrio