使用 SilverStripe 2.4.7。
我已经进行了一些搜索,但似乎无法找到答案。我想在 dataobjectmanager 的弹出窗口中包含一个复选框,但不是针对每个用户。
我有两个单独的页面,一个给一个用户,另一个给另一个,我只想要一个复选框。我认为一个 if 语句就足够了,又快又简单,对吧?
public function getCMSFields()
{
$categories = array("Morning","Afternoon", "Evening", "Night");
return new FieldSet(
new TextField('Title'),
new DatePickerField('Date', 'Date'),
new ImageField('Photo', 'Photo'),
new MoneyField('AdultPrice', 'Adult Price'),
new MoneyField('ChildPrice', 'Child Price'),
new DropdownField('Category', 'Choose a Category', $categories)
);
这是我对 if 语句方法的尝试
if($this->ClassName == 'Movie'){
$films= DataObject::get('Films');
if (!empty($films)) {
// create an array('ID'=>'Name')
$map = $films->toDropdownMap('ID', 'Name');
$fieldset->push(new CheckboxSetField(
$name = "Films",
$title = "Select Films",
$source = $map
));
}
}
基本上,如果我在 getCMSFields_forPopup 中使用它,但不只是在 getCMSFields 中使用它,而是将我的 checkboxsetfield 更改为下拉菜单,这将有效。
编辑
我发现我的方法不起作用,因为 DOM 弹出窗口不能具有包含 DOM (DataObjectManager) 的页面的类名。这是一个简单的继承问题,我不敢相信我以前没见过。有关我如何解决原始查询的详细信息,请参阅下面的答案。