我正在开发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会因为这两种字段类型而失败,以及如何解决它? 谢谢!
答案 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()
));
}