silverstripe - 在 Silverstripe 中,如何像在 DataObjects 中一样自动为 Pages 创建 CMS 字段?
问题描述
在DataObjects
中,该getCMSFields
方法自动创建所有适当的 CMS 字段(称为脚手架)。但是,在扩展类SiteTree
(即页面)中,这不会发生。
如何在 Pages 中使用此表单字段脚手架?
解决方案
除了像您在自己的答案中建议的那样调用 DataObject::getCMSFields() 之外,还可以直接实例化一个 scafolder:
public function getCMSFields() {
// with tabs
$scaffolder = new FormScaffolder($this);
$scaffolder->restrictFields = ['Title', 'Content'];
$scaffolder->tabbed = true;
$fields = $scaffolder->getFieldList();
$fields->addFieldToTab('Root.Main', [
new MySpecialFieldWithCustomOptions('Links', 'My Links', $foobar),
]);
return $fields;
}
public function getCMSFields() {
// without tabs
$scaffolder = new FormScaffolder($this);
$scaffolder->restrictFields = ['Title', 'Content'];
$fields = $scaffolder->getFieldList();
$fields->push(
new MySpecialFieldWithCustomOptions('Links', 'My Links', $foobar)
);
return $fields;
}
这适用于任何 DataObject($this 必须是 DataObject 的一个实例)。分页 DataObjects 的子类。
restrictFields
是可选的,如果未提供,它将执行它可以找到的所有字段。
推荐阅读
- python - Discord.py 添加反应角色问题
- java - AclEntry.add() 方法不更改永久访问权限是否正常?
- python-3.x - 这是将函数分配给变量吗?
- python - 使用python从日志文件中提取select语句
- html - 使用动画变换旋转地球 svg
- sql - SQL Server - Pivot 将行转换为列(带有额外的行数据)
- python - 鹡鸰片段按片段添加所有片段实体一次选择面板而不是一张一张
- mysql - 如何选择配置单元中具有不同 2 列的配置单元中的所有值
- java - 为过期和锁定的用户创建自定义消息
- mongodb - 如何使用 $exists: false 条件创建部分索引?