首页 > 解决方案 > 在 Silverstripe 中,如何像在 DataObjects 中一样自动为 Pages 创建 CMS 字段?

问题描述

DataObjects中,该getCMSFields方法自动创建所有适当的 CMS 字段(称为脚手架)。但是,在扩展类SiteTree(即页面)中,这不会发生。

如何在 Pages 中使用此表单字段脚手架?

标签: silverstripescaffoldingsilverstripe-4

解决方案


除了像您在自己的答案中建议的那样调用 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是可选的,如果未提供,它将执行它可以找到的所有字段。


推荐阅读