我目前正在做一个复杂的多级分类系统。
为简化起见,我将通过提供理论示例来解释我要完成的工作:
我有一个小组表:
group id| group name
1 | A
2 | B
3 | C
我有一个子组表:
subgroup id| group id| sub-group name
1 | 1 | A-aaaa
2 | 1 | A-bbbb
3 | 1 | A-cccc
4 | 2 | B-111111
5 | 2 | B-222222
6 | 3 | C-ONE
7 | 3 | C-TWO
我有一个使用这两个表作为参考的模型:
class Model_ItemGrouping extends Model_Table {
public $entity_code = 'items';
function init() {
parent::init();
$this->addField('itemname')->caption('Item Description');
$this->addField('group_id')->caption('Group Name')
->refModel('Model_Groups')->displayField('groupname');
$this->addField('subgroup_id')->caption('Sub Group Name')
->refModel('Model_SubGroups')->displayField('subgroupname');
}
}
现在,我将此模型应用于我的代码中的表单,如下所示:
$form = $this->add('MVCForm');
$form->addSubmit();
$model=$form->setModel('ItemGrouping');
if($model->isInstanceLoaded())
$form->getModel()->loadData(55); // force it to load item id #55
加载并显示此表单后,用户现在可以编辑并能够为该项目选择不同的组和/或不同的子组。
但我想做的是限制可以根据项目的当前状态从下拉列表中选择的选项集。
如果项目 id #55 当前来自第 3 组,则该组应锁定到第 3 组,并且子组下拉列表应仅包含第 3 组的子组,而不是整个列表。
现在,更详细和具体的问题是:
有没有办法根据项目的状态动态锁定两个引用模型:
Model_Groups
领域参考group_id
和
Model_SubGroups
领域参考subgroup_id
$model
仅使用表单实例及其在PHPaddCondition
中的相应方法而不是前端 JavaScript的一组特定选定项?
我想象这样的事情(修改我之前的片段):
$form = $this->add('MVCForm');
$form->addSubmit();
$model=$form->setModel('ItemGrouping');
if($model->isInstanceLoaded()) {
$form->getModel()->loadData(55); // force it to load item id #55
// if item is of group #2, force references to show options for group #2
$model->getFieldRefModel('group_id')->addCondition('id=',2);
$model->getFieldRefModel('subgroup_id')->addCondition('group_id=',2);
}
注意:这getFieldRefModel
是不存在的,这当然是为了提供使用静态值的概述而过度简化,而我还需要动态传递项目 ID 号并在我实际设置之前首先检查项目的当前分组状态过滤条件。