如何在SilverStripe ModelAdmin中动态显示/隐藏字段

Bar*_*vet 6 php silverstripe

我在ModelAdmin中有一个Dataobject,其中包含以下字段:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果GroupType == "Standard"我希望NumberOfBlocks字段自动隐藏,那么它对用户隐藏.这应该动态发生.

SilverStripe中是否提供此功能,还是需要添加一些自定义JavaScript?

Bar*_*rry 6

您需要使用DisplayLogic模块......

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

然后你的功能可以写成......

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;
}
Run Code Online (Sandbox Code Playgroud)