我如何修改或删除现有的summary_fields时,扩展在Silverstripe对象


How to I modify or remove existing summary_fields when extending an Object in Silverstripe?

我正在扩展具有以下summary_fields(出现在CMS的Security部分)的Member对象。

private static $summary_fields = array(
    'FirstName' => 'First Name',
    'Surname' => 'Last Name',
    'Email' => 'Email',
);

我如何删除'FirstName'和'姓',并将它们替换为自定义字段从数据扩展名:'全名'?

如何将'Email'改为'Email Address'?

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

如果DataObject设置了$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; 
    }
}

似乎我们也不能改变现有字段的字段标签,如Email。我们可以做的是转换一个新的字段EmailAddress,它将返回Email的内容。现在我们可以设置我们想要的标签。