CakePHP:具有不同html属性的多个复选框

时间:2013-07-19 13:57:55

标签: cakephp checkbox

情况如下:

我的表格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属性。这样我就可以使用jQuerycheck OR uncheck只有可编辑的阶段。

3 个答案:

答案 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') ));

获取可编辑选项