2016-07-06 120 views
2

我想了解隐藏的最佳实践方法SilverStripe的默认pagetypes例如虚拟页SilverStripe隐藏默认pagetypes

我假定这些pagetypes的代码都埋在核心,这是我宁可保持不动。所以我发现这个方法的工作:

class HidePageType_VirtualPage extends Page implements HiddenClass { static $hide_ancestor = 'VirtualPage'; }

尽管这似乎是最干净和最哈克解决方案,我仍然不知道如果任何人有一个更好的办法。此外,此方法正在根据类名创建新的数据库列,考虑到隐藏页类型的目标没有意义。

回答

2

有可能是一个更好的解决方案,但我只是创建一个扩展,在canCreate方法返回false。例如:

class CantCreateExtension extends DataExtension 
{ 
    public function canCreate($member) 
    { 
     return false; 
    } 
} 

然后把它应用到你不想要的页面被创建,通过添加以下到您的_config.yml

VirtualPage: 
    extensions: 
    - CantCreateExtension 
+0

干杯,这样做同样的工作(隐藏网页类型的创建没有数据库添加,很好的解决方案。我尝试了同样的方法,而不是'DataExtension',我编写了'VirtualPageExtension'并且得到了500错误。 – Faloude

+0

作为一个后续问题:我希望管理员能够查看,创建和编辑错误页面,但是将其从CMS SiteTree for'content_authors'完全隐藏,也就是普通用户。我尝试了相同的方法,但使用'canView',但页面仍然可以在SiteTree中看到。我相信'canView'只会禁用实际打开的页面(奇怪的是,现在有500个错误,canView设置为false)。 – Faloude

+0

@Faloude你需要重写“canView”和“canEdit”...应该工作。 – bummzack