【发布时间】:2013-12-04 09:36:51
【问题描述】:
我目前正在为 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 ;
}
}
在过去的 2 个小时里,我已经尝试使用 this forum post 上显示的建议,但我所做的一切似乎都不起作用。它已经到了我无法证明在这方面花费更多时间的地步,并且可能不得不回滚到 3.0,这在这一点上绝对不理想。
【问题讨论】:
-
如果您可以在模型管理员中管理页面,您可以使用github.com/icecaster/silverstripe-versioned-gridfield(没有预览窗格,而是指向预览页面的链接)
-
不幸的是,这个解决方案不足以实现我想要实现的目标。为我的客户维护一个熟悉的工作环境非常重要,因此模型管理方法在项目的这个阶段不会成为一个选项。感谢您的回复,因为我相信这个模块将来会对我有所帮助。
标签: php content-management-system admin preview silverstripe