2016-06-18 5 views
5

SilverStripeでは、をDropdownFieldに使用すると2つのフィールドを返すことにします。マップを使用して2つのフィールドを設定する

フィールドfirstnamelastnameのデータオブジェクトTeacherがあります。だから私のDropdownField私はこれらの2つのフィールドをマージしてmap()に渡したいと思います。

私の現在のコードは次のようになります。

public function getCMSfields() { 
     $fields = FieldList::create(TabSet::create('Root')); 

     $fields->addFieldsToTab('Root.Main', array(
      DropdownField::create('TeacherID', 'Teacher')->setSource(Teacher::get()->map('ID', 'Firstname'))->setEmptyString('Select one') 
     ); 

     // etc... 
     return $fields; 
    } 

どのようにそれはfirstnamelastnameをマージし、map()内でそれを渡し、DropdownFieldに戻すことが可能です。

答えて

9

DataObjectカスタムでget関数を作成して、好きなコンテンツを返すことができます。これらのget関数は、map関数を含む多くの場所で使用できます。ここで

は、私たちのオブジェクトにFullName文字列を返すようにgetFullName機能を追加する方法です:

class Teacher extends DataObject { 
    // ... 

    public function getFullName() { 
     return $this->FirstName . ' ' . $this->LastName; 
    } 
} 

その後私たちのDropdownFieldに、我々はそうのようなTeacher::get()->map('ID', 'FullName')を取得することができます

public function getCMSFields() { 
    $fields = parent::getCMSFields(); 

    $fields->addFieldsToTab('Root.Main', array(
     DropdownField::create('TeacherID', 'Teacher') 
      ->setSource(Teacher::get()->map('ID', 'FullName')) 
      ->setEmptyString('Select a teacher') 
    ); 

    return $fields; 
} 
+0

ニース、この作品の完璧な。 Thaks @ 3dgoo – Ivan

関連する問題