gpt4 book ai didi

zend-framework - Zend_Form : data table with checkboxes

转载 作者:行者123 更新时间:2023-12-04 06:47:20 26 4
gpt4 key购买 nike

我想在我的表单元素中有一个来自数据库的数据表,如下所示:

+-----+-------------------------+-----------------------+
| | Number | Name |
+-----+-------------------------+-----------------------+
| [ ] | 123 | ABC |
+-----+-------------------------+-----------------------+
| [x] | 456 | DEF |
+-----+-------------------------+-----------------------+
| [x] | 789 | HIJ |
+-----+-------------------------+-----------------------+

它允许选择多行,例如 MultiCheckBox 元素。

这是我想要的标记类型:
<table>
<thead>
<tr>
<th>Select</th>

<th>Number</th>

<th>Name</th>
</tr>
</thead>

<tr>
<td><input type="checkbox" name="subscribers[]" value="1234"></td>

<td>1234</td>

<td>ABC</td>
</tr>

<tr>
<td><input type="checkbox" name="subscribers[]" value="375950"></td>

<td>375950</td>

<td>DEF</td>
</tr>

<!-- and so on... -->

我可以手动完成,但使用 Zend_Form 可以让我填充表单、轻松检索值并进行验证。我的表单中有其他正常元素。

关于如何使用 Zend_Form 实现这一点的任何想法?也许是自定义元素和装饰器?

谢谢。如果需要,请询问更多信息。

这个问题似乎是相关的: Zend_Form: Database records in HTML table with checkboxes

马克

最佳答案

好的,所以这将是一个更长的答案

表格

<?php
class Form_MyTest extends Zend_Form
{
public function init()
{
$element = $this->createElement('multiCheckbox', 'subscribers');
$element->setOptions(array('value1' => 'label1', 'value2' => 'label2'));
$this->addElement($element);

// ... other elements
}
}

Controller

<?php
class MyController extends Zend_Controller_Action
{
public function myTestAction()
{
$form = new Form_MyTest();

// ... processing logics

$this->view->assign('form', $form);
}
}

看法

<form action="<?php echo $this->form->getAction(); ?>" method="<?php echo $this->form->getMethod(); ?>">
<table>
<thead>
<tr>
<th>Select</th>
<th>Number</th>
<th>Name</th>
</tr>
</thead>
<?php $values = $this->form->getElement('subscribers')->getValue(); ?>
<?php foreach($this->form->getElement('subscribers')->getMultiOptions() as $key => $value) : ?>

<tr>
<td><input type="checkbox" name="subscribers[]" id="subscribers-<?php echo $key; ?>" value="<?php echo $key; ?>" <?php echo in_array($key, $values) ? 'checked="checked"':''; ?>/></td>
<td><label for="subscribers-<?php echo $key; ?>"><?php echo $key; ?></label></td>
<td><label for="subscribers-<?php echo $key; ?>"><?php echo $value; ?></label></td>
</tr>
<?php endforeach; ?>
</table>
<!-- rest of form -->
</form>

这里正在发生一些事情。
我从表单对象中获取预填充的值:

<?php $values = $this->form->getElement('subscribers')->getValue(); ?>
我根据上面的数组将每个复选框标记为选中或未选中

<?php echo in_array($key, $values) ? 'checked="checked"':''; ?>

编辑以回应评论 B/C 评论不支持预块


$element->setOptions(

或者

$element->setMultiOptions(

只接受键 => 值对,所以你想在键值对之外做的任何事情都会有点奇怪。如果您的程序允许您可以将另一个变量传递给 View ,一个使用与 multiCheckbox 相同的键的数组,因此

$this->view->assign('more_datums', array('value1' => array('col_1' => 'col_1_val'[, ...])));

然后在foreach中的 View 中使用

$this->more_datums[$key]['col_1']

关于zend-framework - Zend_Form : data table with checkboxes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com