2017-07-04 8 views
1

summary_fields配列に同じgetterメソッドで変更したいTimeデータ型がいくつかありますが、それらにプロパティを渡すことはできないようです。私の独創的な考えでした:再利用可能なsummary_fields getter Silverstripe

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' 
); 

しかし、これは、この程度の正しい方法ですか?

+0

あなたのユースケースはなんですか?時刻が設定されていない場合は「閉じる」を、その他の場合は実際の時刻を表示する必要がありますか? – bummzack

+0

それは私が目指しているものです。私は、同じことをするOpenとCloseの2つの別々の関数を書く必要がないようにしたいと思っています。 – Chris

+0

私はまだあなたがしようとしているものを得られません。 OpenとCloseの時間があるようですが、GridFieldに何を表示する必要がありますか?あなたは例を挙げることができますか? – bummzack

答えて

4

拡張機能を使用して、希望の機能をTime DBFieldに追加することをお勧めします。そして、あなたはYAML経由で拡張子を追加

class TimeExtension extends Extension 
{ 
    public function OpenClose(){ 
     $val = $this->owner->getValue(); 
     return $val ? $val : 'Closed'; 
    } 
} 

Time 
    extensions: 
    - TimeExtension 

あなたは、あなたのsummary_fieldsとして、このようなものを使用することができるはずです:あなたの延長のようなものである可能性があり(例えば_config.ymlインチ):

private static $summary_fields = [ 
    'Open.OpenClose' => 'Open', 
    'Close.OpenClose' => 'Close' 
]; 
+0

それで私はそれと一緒に行くつもりです。それはちょうどそのような端のケースのためにDBFieldを拡張するために私に料金を汚らせました – Chris

関連する問題