可重复使用 summary_fields getter 银条
Reusable summary_fields getter Silverstripe
我的 summary_fields
数组中有几个时间数据类型,我想使用相同的 getter 方法对其进行修改,但似乎无法将属性传递给它们。我最初的想法是:
class BusinessHour extends DataObject {
private static $db = array(
'Title' => 'Varchar(9)',
'Day' => 'Enum("Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", "Monday")',
'Open' => 'Time',
'Close' => 'Time',
'Closed' => 'Boolean'
);
private static $summary_fields = array(
'Day' => 'Day',
'OpenClose(Open)' => 'Open',
'OpenClose(Close)' => 'Close'
);
public function getOpenClose($val) {
if($val == FALSE) {
return "Closed";
}else {
return $val;
}
}
}
我假设我可以扩展时间数据类型并像这样使用它:
private static $summary_fields = array(
'Open.OpenClose' => 'Open',
'Close.OpenClose' => 'Close'
);
但这是解决这个问题的正确方法吗?
我建议您通过 Time DBField 的扩展添加所需的功能。您的扩展名可能类似于:
class TimeExtension extends Extension
{
public function OpenClose(){
$val = $this->owner->getValue();
return $val ? $val : 'Closed';
}
}
然后通过 YAML 添加扩展(例如 _config.yml
)
Time
extensions:
- TimeExtension
然后您应该可以使用类似这样的东西作为您的 summary_fields
:
private static $summary_fields = [
'Open.OpenClose' => 'Open',
'Close.OpenClose' => 'Close'
];
我的 summary_fields
数组中有几个时间数据类型,我想使用相同的 getter 方法对其进行修改,但似乎无法将属性传递给它们。我最初的想法是:
class BusinessHour extends DataObject {
private static $db = array(
'Title' => 'Varchar(9)',
'Day' => 'Enum("Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday", "Monday")',
'Open' => 'Time',
'Close' => 'Time',
'Closed' => 'Boolean'
);
private static $summary_fields = array(
'Day' => 'Day',
'OpenClose(Open)' => 'Open',
'OpenClose(Close)' => 'Close'
);
public function getOpenClose($val) {
if($val == FALSE) {
return "Closed";
}else {
return $val;
}
}
}
我假设我可以扩展时间数据类型并像这样使用它:
private static $summary_fields = array(
'Open.OpenClose' => 'Open',
'Close.OpenClose' => 'Close'
);
但这是解决这个问题的正确方法吗?
我建议您通过 Time DBField 的扩展添加所需的功能。您的扩展名可能类似于:
class TimeExtension extends Extension
{
public function OpenClose(){
$val = $this->owner->getValue();
return $val ? $val : 'Closed';
}
}
然后通过 YAML 添加扩展(例如 _config.yml
)
Time
extensions:
- TimeExtension
然后您应该可以使用类似这样的东西作为您的 summary_fields
:
private static $summary_fields = [
'Open.OpenClose' => 'Open',
'Close.OpenClose' => 'Close'
];