如何在Silverstripe中扩展Object时修改或删除现有的summary_fields?

Bar*_*vet 2 php silverstripe

我正在扩展具有以下summary_fields(显示在CMS的"安全性"部分中)的Member对象.

private static $summary_fields = array(
    'FirstName' => 'First Name',
    'Surname' => 'Last Name',
    'Email' => 'Email',
);
Run Code Online (Sandbox Code Playgroud)

如何删除'FirstName'和'Surname'并将其替换为数据扩展名中的自定义字段:'Full Name'?

如何将"电子邮件"更改为"电子邮件地址"?

我知道如何通过数据扩展添加summary_fields,但我不知道如何删除或更改它们.

3dg*_*goo 5

如果a DataObject已设置a,$summary_fields我们无法通过扩展名从中删除字段.扩展名$summary_fields与原始版本合并$summary_fields.

要停止合并,$summary_fields我们需要覆盖DataObject的updateSummaryFields()功能.相反,我们将使updateSummaryFields()函数返回扩展名$summary_fields.

class MemberExtension extends DataExtension {

    private static $summary_fields = array( 
        'FullName' => 'Full Name', 
        'EmailAddress' => 'Email Address'
    );

    private static $casting = array(
        'FullName' => 'Text', 
        'EmailAddress' => 'Text'
    );


    public function updateSummaryFields(&$fields) {
        $fields = Config::inst()->get($this->class, 'summary_fields');
    }

    public function getFullName() {
        return $this->owner->FirstName . ' ' . $this->owner->Surname; 
    }

    public function getEmailAddress() {
        return $this->owner->Email; 
    }
}
Run Code Online (Sandbox Code Playgroud)

我们似乎也无法改变现有字段的字段标签Email.我们可以做的是投下一个EmailAddress将返回内容的新字段Email.现在我们可以设置我们想要的标签.