SilverStripe和Display Logic因某些字段类型而失败

时间:2015-01-15 14:01:01

标签: silverstripe

我正在开发SilverStripe 3.1.8网站。我有一个DataExtension定义了一些字段,我正在尝试使用Display Logic来修改CMS的行为:

private static $db = array(
    'Enabled' => 'Boolean',
    'Title' => 'Text'
);
private static $has_one = array(
    'Link' => 'SiteTree',
    'Image' => 'Image'
);

/* this is a DataExtension */
public function updateCMSFields(FieldList $fields) {
    $fields->addFieldsToTab('Root.Other', array(
        CheckboxField::create('Enabled'),
        TextField::create('Title', "Title")->displayIf('Enabled')->isChecked()->end(),
        TreeDropdownField::create("LinkID", "Linked page", 'SiteTree')->displayIf('Enabled')->isChecked()->end(),
        UploadField::create('Image', "Image")->displayIf('Enabled')->isChecked()->end()
    ));

}

当我选中或取消选中“已启用”复选框时,其他三个字段应相应地显示或消失。不幸的是,只有TextField这样做,总是会显示TreeDropdownField和UploadField。

为什么Display Logic会因为这两种字段类型而失败,以及如何解决它? 谢谢!

1 个答案:

答案 0 :(得分:0)

UploadField DropdownField 似乎属于Dealing with non-standard forms类别,您需要将它们包装在 DisplayLogicWrapper 中。

查看 addFieldsToTab 输入数组的最后两行。

private static $db = array(
    'Enabled' => 'Boolean',
    'Title' => 'Text'
);
private static $has_one = array(
    'Link' => 'SiteTree',
    'Image' => 'Image'
);

/* this is a DataExtension */
public function updateCMSFields(FieldList $fields) {
    $fields->addFieldsToTab('Root.Other', array(
        CheckboxField::create('Enabled'),
        TextField::create('Title', "Title")->displayIf('Enabled')->isChecked()->end(),
        DisplayLogicWrapper::create(TreeDropdownField::create("LinkID", "Linked page", 'SiteTree'))->displayIf('Enabled')->isChecked()->end(),
        DisplayLogicWrapper::create(UploadField::create('Image', "Image"))->displayIf('Enabled')->isChecked()->end()
    ));

}