我目前正在为 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/