以SilverStripe显示父页面的内容

以SilverStripe显示父页面的内容,silverstripe,Silverstripe,我有简单的SilverStripe树结构 父页面和子页面。 在父页面上,我显示子页面列表。但我不想创建可访问的url: /父页/子页 我只想允许 /parent page 这就是我在ChildPage索引操作中重定向到ParentPage的原因: class ChildPage_Controller extends Page_Controller { public function index() { $this->redirect('/parent-pa

我有简单的SilverStripe树结构

父页面和子页面。

在父页面上,我显示子页面列表。但我不想创建可访问的url:

/父页/子页

我只想允许

/parent page

这就是我在ChildPage索引操作中重定向到ParentPage的原因:

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中缠绕来覆盖行为。