在SilverStripe中扩展数据对象

在SilverStripe中扩展数据对象,silverstripe,Silverstripe,我在SilverStripe中安装了一个photogallery模块。此模块有一个名为PhotoItem的数据对象 PhotoItem类包含一些字段,但我想添加额外的字段。最简单的方法是编辑PhotoItem文件,但在更新模块时,我会丢失更改 如何使用/mysite/code下的DataObject文件扩展更多字段来扩展此DataObject?您正在搜索DataExtension。看一看,在DataObjects中添加更多字段所需的一切。 特别是查看名为“添加额外数据库字段”的部分,您正在搜索D

我在SilverStripe中安装了一个photogallery模块。此模块有一个名为PhotoItem的数据对象

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


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

您正在搜索DataExtension。看一看,在DataObjects中添加更多字段所需的一切。
特别是查看名为“添加额外数据库字段”的部分,您正在搜索DataExtension。看一看,在DataObjects中添加更多字段所需的一切。
特别是看一下Silverstripe 3.1中名为“添加额外数据库字段”的部分,您可以通过创建并将其应用于类来扩展类

首先,在mysite/code或mysite/code/extensions中创建CustomPhotoItem.php:

CustomPhotoItem.php

要将此扩展应用于类,需要将以下内容添加到类中:

config.yml

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


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

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

首先,在mysite/code或mysite/code/extensions中创建CustomPhotoItem.php:

CustomPhotoItem.php

要将此扩展应用于类,需要将以下内容添加到类中:

config.yml

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


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

谢谢。我就是这么做的,新字段已经添加到表PhotoItem中,但是表单字段在cms中不起作用。您是在使用照片库吗?如果是这样,请尝试使用$fields->pushnewtextfield'extractextfield',extractextfield'而不是addFieldToTab。不,很遗憾,它不起作用。我还在Github上发现了一个问题,模块的开发人员也遇到了同样的问题。非常奇怪:我在公共关系中添加了我的评论,解释为什么它不起作用。没有调用调用updateCMSFields的父::getCMSFields。谢谢。我就是这么做的,新字段已经添加到表PhotoItem中,但是表单字段在cms中不起作用。您是在使用照片库吗?如果是这样,请尝试使用$fields->pushnewtextfield'extractextfield',extractextfield'而不是addFieldToTab。不,很遗憾,它不起作用。我还在Github上发现了一个问题,模块的开发人员也遇到了同样的问题。非常奇怪:我在公共关系中添加了我的评论,解释为什么它不起作用。不调用调用updateCMSFields的父::getCMSFields。
class CustomPhotoItem extends DataExtension {

    private static $db = array(
        'ExtraTextField' => 'Text'
    );

    public function updateCMSFields(FieldList $fields) {
        $fields->push(TextField::create('ExtraTextField', 'Extra Text Field'));
    }
}
PhotoItem:
  extensions:
    - CustomPhotoItem