OCTOBERCMS下拉选项取决于其他下拉列表中的选定值

时间:2017-03-08 23:41:21

标签: php dropdown octobercms octobercms-backend

我遇到了这个问题,经过一段时间寻找一个例子,我无法弄清楚如何解决。

两个下拉选项取决于它们的值。

我有一张表' area'使用fields.yaml文件中的以下结构的值(嵌套在简单的树上工作正常):

fields:
  id:
    label: Número
    oc.commentPosition: ''
    span: auto
    disabled: 1
    type: number

  area_id:
    label: 'Parente de'
    oc.commentPosition: ''
    emptyOption: 'Sem valor'
    span: auto
    type: dropdown

  area:
    label: Área
    oc.commentPosition: ''
    span: full
    required: 1
    type: text

我还有另一张桌子'模数' fields.yaml中具有以下结构的值:

fields:
  modulo:
    label: Módulo
    oc.commentPosition: ''
    span: auto
    required: 1
    type: text

  area:
    label: Área
    oc.commentPosition: ''
    nameFrom: area
    emptyOption: 'Sem valor'
    span: auto
    descriptionFrom: id
    type: relation

在'区域'模特我:

 ... 
 public $hasMany = [
    'modulos' => ['JML\Gkb\Models\Modulos']
 ];

在' Modulos'模特我有

....
 public $belongsTo = [
    'area' => ['\JML\Gkb\Models\Area']
];

我有其他模型与之前的字段有关系,两个下拉字段工作正常,没有任何过滤器,以及麻烦的字段(模数)我无法根据&#39的值找到过滤的方法;面积'下拉列表我在fields.yaml中有以下内容。

....
modulo_id:
  label: mod
  oc.commentPosition: ''
  emptyOption: 'Sem valor'
  span: auto
  required: 1
  dependsOn:

area
  type: dropdown
  tab: Geral

在我的模型PHP文件中,我已经定义了下拉列表,我有:

public function getModuloIdOptions() {
    return Modulos::where('area_id', '=', $this->area)->lists('modulo', 'id');
}

这对我来说似乎是合乎逻辑的(也许不是),我也尝试过DB以及其他更多。我尝试使用dd()来查看是否可以从第一个下拉列表中获取值,但无效。如果我尝试过滤值,则根本不显示任何值(空值除外)。

那里有任何帮助???

TIA

JL

2 个答案:

答案 0 :(得分:5)

数据集作为第二个参数传递以获取“getOptions”方法。以下是可行的替代方法:

public function getModuloIdOptions($value, $data) {
    return Modulos::where('area_id', '=', array_get($data, 'area'))->lists('modulo', 'id');
}

您可能还想尝试访问area_id值:

public function getModuloIdOptions(){
    return Modulos::where('area_id', '=', $this->area_id)->lists('modulo', 'id');
}

area->id值效率较低(可能需要异常处理):

public function getModuloIdOptions(){
    return Modulos::where('area_id', '=', $this->area->id)->lists('modulo', 'id');
}

答案 1 :(得分:1)

我通过以下步骤解决了该下拉列表和其他具有相同目标的问题:

  • 我有'关系'他们的小部件。将它们更改为' Dropdown'窗口小部件。
  • 定义'取决于'字段。
  • 定义了预设'领域到上面的那个。我认为这是问题解决方案缺失的链接,没有记录在任何地方,我在尝试/错误的基础上实现(可能是有价值的添加到10月的文档)。
  • 在我的问题末尾使用snipet代码过滤选项,或者塞缪尔的第二个snipet回答。

这解决了我的问题。

谢谢大家。