使用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 Popup不能包含包含DOM(DataObjectManager)的页面的类名,因此我的方法不起作用。这是一个简单的继承问题,我不敢相信我之前没有看到它。请参阅下面的答案,了解我如何解决原始查询的详细信息。
答案 0 :(得分:0)
最后答案很简单。我做了以下事情,我希望有人觉得这很有用。
正常创建页面上的复选框
if(Permission::check("ADMIN")){
if (! empty($values))
{
$checkBox = new CheckboxSetField(
$name = "Values",
$title = "Select Value",
$source = $values
);
$fieldset->push($checkBox);
}
}
带有Permission :: check(“ADMIN”)的if语句检查管理员是否已登录,如果是,则仅显示复选框。
您还需要在此方法中包含$ fieldset-> push以将其添加到cms。 ADMIN可以更改为您在安全性面板中创建的任何用户组,因此这是一种适应性强的方法。
我发现这对我来说是最好的方式,但如果有人可以改进它/提供更好的解决方案,我很乐意听到它。