【问题标题】:In Silverstripe, how can I automate the CMS field creation for Pages like it works in DataObjects?在 Silverstripe 中,如何像在 DataObjects 中一样自动为 Pages 创建 CMS 字段?
【发布时间】:2021-08-10 07:24:24
【问题描述】:

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

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

【问题讨论】:

    标签: silverstripe scaffolding silverstripe-4


    【解决方案1】:

    除了按照您在自己的答案中的建议调用 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 的一个实例)。 Pages 是 DataObjects 的子类。
    restrictFields 是可选的,如果不提供,它将执行它可以找到的所有字段。

    【讨论】:

      【解决方案2】:

      我们返回DataObject 并获取脚手架字段:

      use SilverStripe\ORM\DataObject;
      use Page;
      
      class MyPage extends Page 
      {
          private static $db = [
              'MyField' => 'Varchar',
          ];
      
          private static $has_one = [
              'MyRelation' => 'MyClass',
          ];
      
          public function getCMSFields()
          {
              // fields from Page class
              $fields = parent::getCMSFields();
              // fields from DataObject class.
              $fieldRepository = DataObject::getCMSFields();
      
              $fields->addFieldsToTab(
                  'Root.MyExtraFields',
                  [
                      $fieldRepository->dataFieldByName('MyField'),
                      $fieldRepository->dataFieldByName('MyRelationID'),
                  ]
              );
      
              return $fields;
      
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-08
        • 1970-01-01
        • 1970-01-01
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多