Silverstripe 3.1 - 禁用预览窗格

For*_*.uk 2 php admin preview silverstripe content-management-system

我目前正在为Silverstripe 3.1开发自己的用户管理模块.我遇到了几个特定页面类型的大问题...但我的所有问题都是由CMS预览窗格引起的.

有没有办法在逐页或站点范围内禁用此预览窗格?

这里有一个更详细的描述我的问题,给出一些背景.

场景1)我有"LogoutPage"类型,允许用户添加到导航区域的链接.此页面类型通过在init()函数上简单调用$ memeber-> logout()来处理注销,然后将用户重定向到CMS中管理员指定的位置.

我的问题是,当在CMS中生成预览时,从预览窗格调用init(),强制用户注销并删除编辑LogoutPage的详细信息的功能.

场景2)我还编写了一站式"MemberProfilePage"类型,当找不到当前用户时,它还处理注册,密码提醒和登录.当用户登录系统时,这依赖于下面的代码示例来生成交替的Title,MenuTitle和Content变量.

遗憾的是,预览窗格会生成错误,因为此时无法访问父类,这也可以通过简单地禁用此页面类型的预览窗格来解决.

public function getTitle(){
    if($m = Member::currentUser()){
        return parent::getTitle() ;
    } else {
        return $this->NotLoggedInTitle ;
    }
}

public function getMenuTitle(){
    if($m = Member::currentUser()){
        return parent::getMenuTitle() ;
    } else {
        return $this->NotLoggedInMenuTitle ;
    }
}

public function getContent(){
    if($m = Member::currentUser()){
        return parent::getContent() ;
    } else {
        return $this->NotLoggedInContent ;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了大约过去2小时使用此论坛帖子上显示的建议,但我做的任何事情似乎都无效.它已经达到了我无法证明在这方面花费更多时间并且可能必须回滚到3.0的程度,这在这一点上绝对不是理想的.

小智 8

我创建了以下Silverstripe扩展,以便在我的页面上我可以使用配置值禁用窗格.这可能是以语法方式禁用它的最简洁方法.

config.yml

CMSMain:
  extensions:
    - CMSMainExtension
Run Code Online (Sandbox Code Playgroud)

CMSMainExtension.php

class CMSMainExtension extends Extension {
    public function updateEditForm($form) {
        $classNameField = $form->Fields()->dataFieldByName('ClassName');
        if ($classNameField) {
            $className = $classNameField->Value();
            if ($className && class_exists($className) && $className::config()->hide_preview_panel)
            {
                $form->Fields()->removeByName(array('SilverStripeNavigator'));
                $form->removeExtraClass('cms-previewable');
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用示例:

class ContentPage extends Page {
    private static $db = array(
    );

    private static $hide_preview_panel = true;
}
Run Code Online (Sandbox Code Playgroud)