私は現在、複雑なマルチレベル分類システムを行っています。
簡単にするために、理論的な例を提供して、私が達成しようとしていることを説明します。
グループテーブルがあります:
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
そして、これら2つのテーブルを参照として使用するモデルがあります:
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 のサブグループのみが含まれ、リスト全体は含まれません。
さて、より精巧で具体的な質問は次のとおりです。
アイテムの状態に基づいて、2 つの参照モデルを動的にロックする方法はありますか。
Model_Groups
フィールドによる参照group_id
と
Model_SubGroups
フィールドによる参照subgroup_id
フロントエンド JavaScript ではなく、フォームの$model
インスタンスとそれに対応するPHPaddCondition
のメソッドを使用して、選択されたアイテムの特定のセットのみに?
私はこのようなものを想像します(私の以前のスニペットを変更します):
$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 番号を動的に渡し、項目の現在のグループ化状態を最初に調べる必要もあります。フィルター条件。