CakePHP动态填充复选框

时间:2015-03-16 10:12:17

标签: javascript cakephp checkbox

目前我正在使用CakePHP 2.6,我有2个表和多个连接表:

 CREATE TABLE IF NOT EXISTS `iam-test_db`.`accesses` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `location_id` INT UNSIGNED NOT NULL,
  `facility_id` INT UNSIGNED NOT NULL,
  `department_id` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),

 CREATE TABLE IF NOT EXISTS `iam-test_db`.`systems` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `facility_id` INT UNSIGNED NOT NULL,
  `name` VARCHAR(60) NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_systems_facilities`
    FOREIGN KEY (`facility_id`)

CREATE TABLE IF NOT EXISTS `iam-test_db`.`accesses_systems` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `access_id` INT UNSIGNED NOT NULL,
  `system_id` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_accesses_systems_accesses`
    FOREIGN KEY (`access_id`)
  CONSTRAINT `fk_accesses_systems_systems`
    FOREIGN KEY (`system_id`)

我已经为设施和部门创建了成功依赖的填充下拉列表,并且当前将所有系统列为我的添加表单中的复选框。

My AccessesController.php

public function add() {
    if ($this->request->is('post')) {
        $this->Access->create();
        if ($this->Access->save($this->request->data)) {
            $this->Session->setFlash(__('The access has been saved.'));
            return $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The access could not be saved. Please, try again.'));
        }
    }   
    $locations = $this->Access->Location->find('list');
    $systems = $this->Access->System->find('list');
    $this->set(compact('locations', 'facilities', 'departments', 'systems'));
}

在我的accessses / add.ctp中,我已将此行包含在复选框

echo $this->Form->input('System',array(
        'label' => __('Systems',true),
        'id' => 'AccessSystem',
        'div' => 'checkbox',
        'type' => 'select',
        'multiple' => 'checkbox',
        'options' => $systems,
        ));

位置/设施/部门下拉列表依赖于JsHelper / jquery。

现在我希望复选框也是依赖的,我选择哪个工具。但是我不知道如何制作它。我想我必须使用javascript / jquery。

我正在考虑显示一个按钮,然后单击一个弹出窗口,其中显示了与设施相关的系统。这是正确的方式还是你有更好的想法?

谢谢: - )

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题,所以我指的是问题所在。我相信你有很多系统,你想根据设施的ID自动检查/取消选中它们。您可以为它们创建一个部分,并在那里包含这些复选框。该部分可以有两种状态,折叠和展开,折叠时可以有+图标,展开时可以有 - 图标。单击+图标将展开该部分,单击 - 图标将折叠该部分。此外,您可以在复选框中添加一个类。我们假设您添加了一个'system-checkbox-' + id类,其中id是设施的ID。另外,我们假设复选框已包含在ID为div的{​​{1}}中。然后,根据设施的ID检查和取消选中复选框将如下所示:

my-section

如果我误解了这个问题,请告诉我。