以SilverStripe显示父页面的内容
我有简单的SilverStripe树结构 父页面和子页面。 在父页面上,我显示子页面列表。但我不想创建可访问的url: /父页/子页 我只想允许 /parent page 这就是我在ChildPage索引操作中重定向到ParentPage的原因:以SilverStripe显示父页面的内容,silverstripe,Silverstripe,我有简单的SilverStripe树结构 父页面和子页面。 在父页面上,我显示子页面列表。但我不想创建可访问的url: /父页/子页 我只想允许 /parent page 这就是我在ChildPage索引操作中重定向到ParentPage的原因: class ChildPage_Controller extends Page_Controller { public function index() { $this->redirect('/parent-pa
class ChildPage_Controller extends Page_Controller
{
public function index()
{
$this->redirect('/parent-page/');
}
}
它在前端工作得很好。但在CMS中,当我单击树中的ChidPage后,它会重定向我编辑父页面。(不是指向前端url,而是指向admin/pages/edit/show/ParentPageID)。这仅在拆分或预览模式下发生
你能建议如何预防它吗?还是有其他选择?谢谢 在
init
功能中,您可以检查用户是否有查看CMS的权限,以及页面当前是否设置了stage get变量:
class ChildPage_Controller extends Page_Controller {
public function init() {
parent::init();
if (!($this->getRequest()->getVar('stage') && Permission::check('VIEW_CMS'))) {
return $this->redirect($this->Parent()->Link(), 301);
}
}
}
这样,普通用户将被重定向,而CMS用户不使用?stage=。。。设置将被重定向。预览/拆分窗格始终设置stage get变量,因此在预览/拆分窗格中查看时,页面将永远不会重定向。在
init
功能中,您可以检查用户是否有权查看CMS,以及页面当前是否设置了stage get变量:
class ChildPage_Controller extends Page_Controller {
public function init() {
parent::init();
if (!($this->getRequest()->getVar('stage') && Permission::check('VIEW_CMS'))) {
return $this->redirect($this->Parent()->Link(), 301);
}
}
}
这样,普通用户将被重定向,而CMS用户不使用?stage=。。。设置将被重定向。预览/拆分窗格总是设置stage get变量,这样在预览/拆分窗格中查看时,页面将永远不会重定向。因此,我终于找到了解决方案 预览窗格显示在iframe中。和父CMS框架绑定以更改预览窗格的url。这是因为当你们点击预览窗格中的某个链接时,CMS会引导你们编辑那个页面。因此,当我从ChildPage重定向到ParentPage时,CMS窗格会捕获url的更改,编辑器会重定向到ParentPage 我还没有找到方法,如何防止它,最后我需要编辑CMS的javascript(LeftAndMain.Preview.js第251行) 所以我注释掉了这行“self.\u loadCurrentPage();” 在评论中写道:“这避免了例如在RedirectorPage实例上强制重定向编辑视图。”但它还是进行了重定向
也许有更好的方法,但我还没有找到 所以我终于找到了解决办法 预览窗格显示在iframe中。和父CMS框架绑定以更改预览窗格的url。这是因为当你们点击预览窗格中的某个链接时,CMS会引导你们编辑那个页面。因此,当我从ChildPage重定向到ParentPage时,CMS窗格会捕获url的更改,编辑器会重定向到ParentPage 我还没有找到方法,如何防止它,最后我需要编辑CMS的javascript(LeftAndMain.Preview.js第251行) 所以我注释掉了这行“self.\u loadCurrentPage();” 在评论中写道:“这避免了例如在RedirectorPage实例上强制重定向编辑视图。”但它还是进行了重定向
也许有更好的方法,但我还没有找到 谢谢你的回答,但我想重定向预览窗格,但保持CMS在当前编辑的页面上。但我现在知道了解决方案,我会把它写在答案中。谢谢你的回答,但我想重定向预览窗格,但保持CMS在当前编辑的页面上。但我现在知道了解决方案,我会在答案中写出来。黑客攻击核心文件会扼杀你的升级能力。如果可能的话,您应该研究通过在自定义js中缠绕来覆盖该行为。黑客核心文件会扼杀您的升级能力。如果可能的话,您应该考虑通过在定制js中缠绕来覆盖行为。