【问题标题】:Extend a DataObject in SilverStripe在 SilverStripe 中扩展数据对象
【发布时间】:2014-10-23 10:49:02
【问题描述】:

我在 SilverStripe 中安装了一个相册模块。该模块有一个名为 PhotoItem 的 DataObject。

PhotoItem 类包含一些字段,但我想添加额外的字段。最简单的方法是编辑 PhotoItem 文件,但在更新模块时我会丢失更改。

如何使用 /mysite/code 下的 DataObject 文件来扩展此 DataObject 的更多字段?

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

    在 Silverstripe 3.1 中,您可以通过创建 DataExtension 并将其应用于您的类来扩展类。

    首先,您将在 mysite/codemysite/code/extensions 中创建一个 CustomPhotoItem.php

    CustomPhotoItem.php

    class CustomPhotoItem extends DataExtension {
    
        private static $db = array(
            'ExtraTextField' => 'Text'
        );
    
        public function updateCMSFields(FieldList $fields) {
            $fields->push(TextField::create('ExtraTextField', 'Extra Text Field'));
        }
    }
    

    为了将此扩展应用到您的课程,您需要将以下内容添加到您的config.yml

    config.yml

    PhotoItem:
      extensions:
        - CustomPhotoItem
    

    您的 config.yml 应该位于 mysite/_config/config.yml

    运行dev/build?flush=1,您应该会看到新变量已添加到原始对象中。

    【讨论】:

    • 谢谢。我正是这样做的,新字段已添加到 PhotoItem 表中,但表单字段并未出现在 cms 中。
    • 您使用的是this the module 吗?如果是这样,请尝试使用$fields->push(new TextField('ExtraTextField', 'Extra Text Field')) 而不是addFieldToTab
    • 不,很遗憾,它不起作用。我还在 Github 上打开了一个问题,模块的开发人员也遇到了同样的问题。很奇怪:(github.com/andrewhoule/silverstripe-photogallery/issues/4
    • 我在 PR 中添加了关于它为什么不起作用的评论。 (不调用调用 updateCMSFields() 的 parent::getCMSFields())。
    【解决方案2】:

    您正在搜索 DataExtension。看看documentation,您需要为 DataObjects 添加更多字段。 特别是查看名为添加额外数据库字段

    的部分

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-28
      • 1970-01-01
      • 2018-08-07
      • 2020-11-11
      相关资源
      最近更新 更多