0

使用 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) 的页面的类名。这是一个简单的继承问题,我不敢相信我以前没见过。有关我如何解决原始查询的详细信息,请参阅下面的答案。

4

1 回答 1

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 可以更改为您在安全面板中创建的任何用户组,因此这是一种适应性强的方法。

我发现这对我来说是最好的方法,但如果有人可以改进它/提供更好的解决方案,我很想听听。

于 2012-10-25T12:10:34.190 回答