SilverStripe 隐藏默认页面类型
SilverStripe hide default pagetypes
我正在尝试了解隐藏 SilverStripe 默认页面类型的最佳实践 方法,例如虚拟页面
我假设这些页面类型的代码埋在核心中,我宁愿保持不变。因此,我发现此方法有效:
class HidePageType_VirtualPage extends Page implements HiddenClass {
static $hide_ancestor = 'VirtualPage';
}
虽然这似乎是最干净、最不复杂的解决方案,但我仍然想知道是否有人有更好的方法。此外,此方法是根据 class 名称创建一个新的数据库列,考虑到 隐藏页面类型 的目标,这没有任何意义。
可能有更好的解决方案,但我只是在 canCreate
方法中创建一个 returns false
的扩展。示例:
class CantCreateExtension extends DataExtension
{
public function canCreate($member)
{
return false;
}
}
然后将其应用于您不想创建的页面,方法是将以下内容添加到您的 _config.yml
:
VirtualPage:
extensions:
- CantCreateExtension
这是原始 post 的解决方案,针对 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';
}
据我所知,这仍然是阻止包括管理员在内的所有人访问它的唯一方法(除了使用 CSS 隐藏它)。希望该框架的未来版本将添加一个 $hide_self 配置变量或类似的。
我正在尝试了解隐藏 SilverStripe 默认页面类型的最佳实践 方法,例如虚拟页面
我假设这些页面类型的代码埋在核心中,我宁愿保持不变。因此,我发现此方法有效:
class HidePageType_VirtualPage extends Page implements HiddenClass {
static $hide_ancestor = 'VirtualPage';
}
虽然这似乎是最干净、最不复杂的解决方案,但我仍然想知道是否有人有更好的方法。此外,此方法是根据 class 名称创建一个新的数据库列,考虑到 隐藏页面类型 的目标,这没有任何意义。
可能有更好的解决方案,但我只是在 canCreate
方法中创建一个 returns false
的扩展。示例:
class CantCreateExtension extends DataExtension
{
public function canCreate($member)
{
return false;
}
}
然后将其应用于您不想创建的页面,方法是将以下内容添加到您的 _config.yml
:
VirtualPage:
extensions:
- CantCreateExtension
这是原始 post 的解决方案,针对 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';
}
据我所知,这仍然是阻止包括管理员在内的所有人访问它的唯一方法(除了使用 CSS 隐藏它)。希望该框架的未来版本将添加一个 $hide_self 配置变量或类似的。