OCTOBERCMS 下拉选项取决于其他下拉菜单中的选定值
OCTOBERCMS Dropdown options dependent on selected value on other dropdown
我被这个问题困住了,在搜索示例一段时间后我无法弄清楚如何解决。
两个下拉选项 table 取决于它们的值。
我有一个 table 具有 '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 中还有另一个 table 'modulos' 具有以下结构的值:
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
在 'Area' 模型中我有:
...
public $hasMany = [
'modulos' => ['JML\Gkb\Models\Modulos']
];
在'Modulos'模型中我有
....
public $belongsTo = [
'area' => ['\JML\Gkb\Models\Area']
];
我有其他模型与以前的字段有关系,两个下拉字段在没有任何过滤器的情况下工作正常,故障排除字段(模数)我找不到根据 [=43 的值进行过滤的方法=] 下拉菜单 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
数据集作为第二个参数传递给"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');
}
我通过以下步骤解决了该下拉菜单和其他具有相同 objective 的问题:
- 我有 'Relation' 小部件。将它们更改为 'Dropdown' 小部件。
- 定义了 'Depends on' 字段。
- 将 'Preset' 字段定义为上述字段。我认为这是缺少 link 的问题解决方案,在任何地方都没有记录,我在 try/error 的基础上到达那里(可能将其添加到 10 月的文档中很有价值)。
- 使用问题末尾的代码片段或 Samuel 回答的第二个片段代码过滤选项。
这解决了我的问题。
谢谢大家
我被这个问题困住了,在搜索示例一段时间后我无法弄清楚如何解决。
两个下拉选项 table 取决于它们的值。
我有一个 table 具有 '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 中还有另一个 table 'modulos' 具有以下结构的值:
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
在 'Area' 模型中我有:
...
public $hasMany = [
'modulos' => ['JML\Gkb\Models\Modulos']
];
在'Modulos'模型中我有
....
public $belongsTo = [
'area' => ['\JML\Gkb\Models\Area']
];
我有其他模型与以前的字段有关系,两个下拉字段在没有任何过滤器的情况下工作正常,故障排除字段(模数)我找不到根据 [=43 的值进行过滤的方法=] 下拉菜单 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
数据集作为第二个参数传递给"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');
}
我通过以下步骤解决了该下拉菜单和其他具有相同 objective 的问题:
- 我有 'Relation' 小部件。将它们更改为 'Dropdown' 小部件。
- 定义了 'Depends on' 字段。
- 将 'Preset' 字段定义为上述字段。我认为这是缺少 link 的问题解决方案,在任何地方都没有记录,我在 try/error 的基础上到达那里(可能将其添加到 10 月的文档中很有价值)。
- 使用问题末尾的代码片段或 Samuel 回答的第二个片段代码过滤选项。
这解决了我的问题。
谢谢大家