2014-06-25 36 views
2

我正在扩展具有以下summary_fields(出现在CMS的Security部分中)的Member对象。如何在Silverstripe中扩展对象时修改或删除现有的summary_fields?

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

如何将消除“姓”和“姓”,并从数据扩展的自定义字段替换他们:“全名”?

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

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

回答

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

+1

谢谢@ 3dgoo值得注意的是任何看这个的人。如果我使用updateSummaryFields覆盖,好像我不得不重新添加要添加到$ summary_fields的任何对象字段。 例如:将FirstName添加到$ summaryfields会导致空白字段。但添加ShowFirstName并设置getShowFirstName:return $ this-> owner-> FirstName;作品。 – BaronGrivet

+0

@Tama真的很有趣。感谢分享。 – 3dgoo

+0

感谢您的支持,我不断向成员添加更多内容,但无法使用$ summary_fields进行覆盖。 – Mediabeastnz

相关问题