php - Silverstripe 3.1 - 禁用预览 Pane

标签 php content-management-system admin preview silverstripe

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

是否有任何方法可以逐页或站点范围地禁用此预览 Pane ?

下面是对我的问题的更详细描述,以提供一些背景信息。

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

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

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

不幸的是,预览 Pane 会生成错误,因为此时它无法访问父类,这也可以通过简单地为此页面类型禁用预览 Pane 来解决。

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 ;
    }
}

我在过去 2 小时内尝试使用 this forum post 上显示的建议但我所做的一切似乎都不起作用。它已经到了我无法再花更多时间在这上面的地步,可能不得不回滚到 3.0,这在这一点上绝对不理想。

最佳答案

我创建了以下 Silverstripe 扩展,以便在我的页面上可以使用配置值禁用 Pane 。这可能是以编程方式禁用它的最干净的方法。

config.yml

CMSMain:
  extensions:
    - CMSMainExtension

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');
            }
        }
    }
}

使用示例:

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

    private static $hide_preview_panel = true;
}

关于php - Silverstripe 3.1 - 禁用预览 Pane ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095177/

相关文章:

php - 是否可以在 PHP 的 foreach 语句中嵌入列表函数?

open-source - 基于kohanaphp的开源CMS

django - 如何使用 PostgreSQL 计数估计加速 Django 的管理页面?

wordpress - 如何创建基本的 WordPress 管理指针?

django - 如何修复 Django 错误 : "' unicode' object has no attribute 'tzinfo' "on database read

php - 如果 int 具有特定值,则执行某些操作,如果没有,则执行其他操作

php - 更改电子邮件验证错误消息 Laravel 5.7

php - 为什么 MySQL 不存储来自 Android 应用程序的数据

html - 限制 div 中的字数

android - 是否有免费的移动应用程序 CMS?