【发布时间】:2012-06-06 21:56:15
【问题描述】:
好的,我是 Zend 框架的新手,如果这有点无知,请原谅。
现在我在表格中构建了一个表格,表格看起来像
<table>
<tr>
<td><label><input>[Text]</td>
</tr>
<tr>
<td><label><input>[Text]</td>
</tr>
<tr>
<td><label><input>[Text]</td>
</tr>
</table>
最初建造它的人为我工作的人留下了一些想要的东西。这些同样的人现在想要基本上有一个看起来像这样的布局..
<table>
<tr>
<td><label><input>[Text]</td>
</tr>
</table>
<table>
<tr>
<td><label><input>[Text]</td>
</tr>
<tr>
<td><label><input>[Text]</td>
</tr>
<tr>
<td><label><input>[Text]</td>
</tr>
</table>
该表目前通过 foreach 语句推出,因为字段是动态的并且是基于角色的。本质上,代码会吐出一个完整的表单元素数组,然后 foreach 将其构建出来。我对此非常了解。但我的主要问题是,有没有办法可以打破表态,然后推出另一个?
总的来说,我想以某种方式注入</tr></table><br><table>,这样我就可以拥有两个不同的表。
循环更新 我必须排除一些变量和一些类似的东西,作为正在进行的propietray的一部分,所以我不允许在网上发布任何代码,所以说这是一个最小版本,去掉任何可能使它引人注目的东西
$form = new form_TableForm(self::CHANGEPREFS);
$form->setAction($this->_helper->url('saveprefs'));
foreach ($defaults as $name => $value)
{
if ($name == 'xxx1' && (!xxx::eval('xxx','view') || $zzz)) continue;
if ($name == 'xxx2' && !xxx::eval('xxx','view')) continue;
if ($name == 'xxx3' && !xxx::eval('xxx','alerts')) continue;
if ($name == 'xxx4' && !xxx::eval('xxx','alerts')) continue;
$element = new Zend_Form_Element_Checkbox($name);
$element->setLabel($this->_helper->Literal->xxx($name));
if ($value) $element->setValue($value);
$element->setOptions(array(
'required' => false,
'fullrow' => true
));
$form->addElement($element);
//if($name == 'xxx5'){$form .= "</table><table>";}
//bad attempt at injection above
}
$form->addDisplayGroup(array('savebutton'), 'buttonsgroup', array('fullrow' => true));
return $form;
【问题讨论】:
-
这听起来不像是 Zend Framework 相关的问题,因为它听起来不像您使用 Zend_Form 类。对您的问题的一般回答是,是的,您可以在循环中添加条件语句以添加一些额外的 HTML 标记,从而有效地关闭和打开新表。你只需要知道什么时候(有条件地)你想这样做。如果你有一些代码和细节,比如你想关闭你的桌子,我会为你破解代码。应该不会太难。
-
它在 foreach 循环中使用
$form = new form_TableForm(self::CHANGEPREFS)和Zend_Form_Element_Checkbox来遍历提到的数组,从我收集的内容中可以构建一个类似于第一个提到的表。这就是我被卡住的原因,因为如果它自动滚动表格,那么循环的每一次通过只添加一个 tr, td 集,我想不出一种方法来添加我想要的条件。或者等一下,我可能只是在输入这个.. -
不,我错了..希望它像沿着循环查找添加最后一个元素的位置一样简单,然后在它注入一点点时,我想结束一张桌子并开始另一个。
-
Hmm.. 看起来 form_TableForm 可能是 Zend_Form 类,因为 Zend_Form_Element_Checkbox 是 Zend_Form 的一个元素。我曾经使用 Zend_Form 有一段时间,但因为太复杂而停止了。如果您发布循环代码,如果这只是装饰器问题并帮助制作自定义装饰器,我可能会提供帮助。
-
我明白了。
form_TableForm必须是扩展Zend_Form的自定义类。foreach循环根据$defaults中设置的内容将表单元素添加到表单,但它们都必须是复选框元素,因为这就是它要添加的内容。但是,此代码实际上并不是打印 HTML 代码的内容,但它确实设置了表单元素的显示方式。要修改 HTML 输出,您必须熟悉装饰器。 framework.zend.com/manual/en/zend.form.standardDecorators.html。您只想为$name == xxx5创建一个新表吗?
标签: php zend-framework zend-form