情况如下:
我的表格stages
具有以下结构
| id | name | editable|
-----------------------------------------------------------------------------
| open | Open | 1 |
| paysheet_review | Paysheet Submitted (Awaiting Office Approval) | 0 |
| to_pay | Paysheet Approved (Awaiting Payment) | 0 |
| paid | Paid | 1 |
| purgatory | Flip or Refund | 0 |
| closed | Deal Closed | 1 |
-----------------------------------------------------------------------------
我正在通过
创建一个多重复选框在控制器
中<?php $_stages = $this->Stage->find("list");?>
在视图中
<?php echo $this->Form->input("stage", array("multiple" => "checkbox", "options" => $_stages));?>
创建以下html
<div class="control-group">
<label class="control-label" for="DealStage">Stage</label>
<input type="hidden" value="" id="DealStage_" name="data[Deal][stage]">
<div class="controls">
<label class="checkbox"><input type="checkbox" id="DealStageOpen" value="open" name="data[Deal][stage][]">Open</label>
<label class="checkbox"><input type="checkbox" id="DealStagePaysheetReview" value="paysheet_review" name="data[Deal][stage][]">Paysheet Submitted (Awaiting Office Approval)</label>
<label class="checkbox"><input type="checkbox" id="DealStageToPay" value="to_pay" name="data[Deal][stage][]">Paysheet Approved (Awaiting Payment)</label>
<label class="checkbox"><input type="checkbox" id="DealStagesPaid" value="paid" name="data[Deal][stage][]">Paid</label>
<label class="checkbox"><input type="checkbox" id="DealStagePurgatory" value="purgatory" name="data[Deal][stage][]">Flip or Refund</label>
<label class="checkbox"><input type="checkbox" id="DealStageClosed" value="closed" name="data[Deal][stage][]">Deal Closed</label>
</div>
</div>
现在我想从数据库列传递editable
作为每个复选框的标题。
有没有办法在CakePHP中创建multiple checkbox
并为每个输入类型复选框添加title
属性。这样我就可以使用jQuery
到check OR uncheck
只有可编辑的阶段。
答案 0 :(得分:3)
如果在一次调用中生成了复选框,则无法为复选框提供单独的属性,但是可以轻松地单独生成每个复选框。为此,请确保将阶段数据传递给视图:
// in Controller action
$stages = $this->Stage->find("all");
$this->set('stages', $stages);
在视图中,只需遍历$stages
变量即可生成复选框:
// in view file
foreach ($stages as $stage) {
$id = $stage['Stage']['id'];
$name = $stage['Stage']['name'];
$editable = $stage['Stage']['editable'];
echo $this->Form->input(
'Deal.stage.' . $id,
['value' => $id, 'label' => $name, 'type' => 'checkbox', 'data-editable' => $editable]
);
}
我并不完全遵循您想要对此可编辑属性执行的操作 - 但是要从js访问它,那么它将是:
// in js file
$('input[type=checkbox]'].each(function() {
var editable = $(this).data('editable');
...
});
答案 1 :(得分:1)
不幸的是,我找不到像你想要的那样向$options
添加属性的方法。我通常做的就是“手工”做那部分,忘记FormHelper并写下旧的HTML。
如果这不适合您,并且您希望继续使用Formhelper,那么我可以建议使用js方法。
首先,您需要更改find('list')
的{{1}}以获取可编辑属性。
find('all')
并将其传递给视图。现在,在视图中,您需要修改数组,使其看起来像旧数组
<?php $_stages = $this->Stage->find("all");?>
到目前为止,你现在拥有同样的东西。这就是js的用武之地。在视图中,最好在底部添加类似
的内容<?php
$stageHelper = array();
foreach($_stages as $stage)
$stageHelper[$stage['Stage']['id']] = $stage['Stage']['name'];
echo $this->Form->input("stage", array("multiple" => "checkbox", "options" => stageHelper));
?>
应该做的就是这样。
就我个人而言,我发现仅用html做这件事并不复杂。但如果你想要的话,还有另一种方法可以做到。
答案 2 :(得分:1)
您想要的此类解决方案目前在CakePHP中存在不。但你可以创建一个新的Form Helper,我指的是Helper中的Custom方法来覆盖这个方法,并在helper方法中创建一个新属性,如:
<?php echo $this->MyForm->input("stage", array("multiple" => "checkbox", "options" => $_stages, 'editable' => $editables));?>
您可以使用其他find('list', array('fields' => array('id', 'editable') ));