SilverStripe隐藏默认页面类型

时间:2016-07-06 17:28:58

标签: silverstripe

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

我假设这些页面类型的代码被埋在核心中,我宁愿保持不变。因此,我发现这种方法有效:

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

虽然这似乎是最干净,最不讨厌的解决方案,但我仍然想知道是否有人有更好的方法。此外,这种方法是基于类名创建一个新的数据库列,考虑到隐藏页面类型的目标,这是没有意义的。

2 个答案:

答案 0 :(得分:2)

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

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

然后将以下内容添加到_config.yml

,将其应用于您不想创建的页面
VirtualPage:
  extensions:
    - CantCreateExtension

答案 1 :(得分:1)

这是原始帖子中的解决方案,已针对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';
}

据我所知,这仍然是阻止所有人(包括管理员隐藏)的唯一方法。希望该框架的未来版本将添加$ hide_self配置var或类似版本。