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

时间:2014-06-25 20:59:46

标签: php silverstripe

我正在扩展具有以下summary_fields的成员对象(显示在CMS的“安全性”部分中)。

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

我如何删除' FirstName'和'姓氏'并使用数据扩展程序中的自定义字段替换它们:'全名'?

我如何更改电子邮件'阅读'电子邮件地址'?

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

1 个答案:

答案 0 :(得分:5)

如果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的内容。现在我们可以设置我们想要的标签。