2016-03-30 10 views
5

に/非表示のフィールドを表示するには、私は、次のフィールドでModelAdminの中のDataObjectを持っている:はどのように動的にSilverStripe ModelAdminの

class NavGroup extends DataObject { 

    private static $db = array(
     'GroupType' => 'Enum("Standard,NotStandard","Standard")', 
     'NumberOfBlocks' => 'Int' 
    ); 

    public function getCMSFields() { 
     $groupTypeOptions = singleton('NavGroup')->dbObject('GroupType')->enumValues(); 
     $fields = parent::getCMSFields(); 
     $fields->addFieldToTab('Root.Main', new Dropdownfield('GroupType', 'Group Type', $groupTypeOptions)); 
     $fields->addFieldToTab('Root.Main', new Numericfield('NumberOfBlocks', 'Number of Blocks')); 
     return $fields; 
    } 
} 

GroupType == "Standard"た場合、私はNumberOfBlocksフィールドが自動的にそれがユーザーから隠されています非表示にしたいです。これは動的に起こるはずです。

この機能はSilverStripeで利用できますか、カスタムJavaScriptを追加する必要がありますか?

+0

これはコア機能ではありませんが、Unclecheeseがこれを解決するモジュール 'Display Logic'を作成しました:https://github.com/unclecheese/silverstripe-display-logic – colymba

答えて

4

あなたはgetCMSFields()

public function getCMSFields() { 
    $fields = parent::getCMSFields(); 

    $fields->addFieldsToTab('Root.Main',array(
     Dropdownfield::create('GroupType', 'Group Type', singleton('NavGroup')->dbObject('GroupType')->enumValues())), 
     Numericfield::create('NumberOfBlocks', 'Number of Blocks') 
      ->displayIf('GroupType')->isEqualTo('Standard') 
    )); 

    return $fields; 
} 
+0

@BaronGrivet - このソリューションは君は? – 3dgoo

1

すべての要求は非常に、現在のオブジェクトの状態を使用しています...そして、あなたの関数のように書くことができ

https://github.com/unclecheese/silverstripe-display-logic

... DisplayLogicモジュールを使用する必要がありますそのような場合は簡単にif statementを実行できます:

public function getCMSFields() { 
    $groupTypeOptions = singleton('NavGroup')->dbObject('GroupType')->enumValues(); 
    $fields = parent::getCMSFields(); 
    $fields->addFieldToTab('Root.Main', new Dropdownfield('GroupType', 'Group Type', $groupTypeOptions)); 

    if ($this->GroupType === 'Standard') { 
     $fields->addFieldToTab('Root.Main', new Numericfield('NumberOfBlocks', 'Number of Blocks')); 
    } else { 
     $fields->addFieldToTab('Root.Main', new HiddenField('NumberOfBlocks', $this->NumberOfBlocks); 
    } 
    return $fields; 
} 

しかしGroupTypeを変更してもフィールドは更新されず、更新をトリガーするためにフォームを保存する必要があります。 unclecheese/silverstripe-display-logicモジュールはこの問題を解決します。