SilverStripe隐藏默认页面类型

SilverStripe隐藏默认页面类型,silverstripe,Silverstripe,我试图了解隐藏SilverStripe默认页面类型的最佳实践方法,例如虚拟页面 我假设这些页面类型的代码被隐藏在核心中,我宁愿不去碰它。因此,我发现这种方法很有效: class HidePagetType\u VirtualPage扩展页面实现HiddenClass{ 静态$hide_祖先='VirtualPage'; } 虽然这似乎是最干净、最不黑客的解决方案,但我仍然怀疑是否有人有更好的方法。此外,此方法基于类名创建一个新的数据库列,考虑到隐藏页面类型的目标,这是没有意义的。可能有更好的解决

我试图了解隐藏SilverStripe默认页面类型的最佳实践方法,例如虚拟页面

我假设这些页面类型的代码被隐藏在核心中,我宁愿不去碰它。因此,我发现这种方法很有效:

class HidePagetType\u VirtualPage扩展页面实现HiddenClass{
静态$hide_祖先='VirtualPage';
}


虽然这似乎是最干净、最不黑客的解决方案,但我仍然怀疑是否有人有更好的方法。此外,此方法基于类名创建一个新的数据库列,考虑到隐藏页面类型的目标,这是没有意义的。可能有更好的解决方案,但我只需要在
canCreate
方法中创建一个返回
false
的扩展。例如:

class CantCreateExtension extends DataExtension
{
    public function canCreate($member)
    {
        return false;
    }
}
然后,通过将以下内容添加到
\u config.yml
,将其应用于不希望创建的页面:

VirtualPage:
  extensions:
    - CantCreateExtension

以下是针对SilverStripe 4更新的原始帖子中的解决方案:

<?php

use SilverStripe\CMS\Model\VirtualPage;
use SilverStripe\ORM\HiddenClass;

class HideVirtualPage extends VirtualPage implements HiddenClass {
    private static $hide_ancestor = 'SilverStripe\CMS\Model\VirtualPage';
}

干杯,这做同样的工作(从“创建页面”下拉列表中隐藏页面类型),而不添加数据库,这是一个很好的解决方案。我也尝试了同样的方法,但没有使用
DataExtension
而是编写了
VirtualPageExtension
,结果出现了500个错误。作为后续问题:我希望管理员能够查看、创建和编辑错误页面,但是对于
内容作者
又称普通用户,完全将其隐藏在CMS站点树中。我尝试了相同的方法,但是使用了
canView
,但是页面仍然在SiteTree中可见。我相信
canView
只会禁用实际打开页面(奇怪的是,现在会导致500个错误,canView设置为false)。@Faloude您需要覆盖“canView”和“canEdit”…这应该可以。再次感谢。没错,页面图标现在是透明的,对于内容作者来说不再可以点击。理想情况下,我宁愿将其完全隐藏,但我想如果不进入cms css,这是不可能的,对吗?@Faloude是的,你可以添加一个自定义css文件来完全隐藏它们。您可以通过配置设置轻松完成此操作,请参阅: