2016-06-18 12 views
5

W SilverStripe Chcę zwrócić dwa pola, gdy używam map w DropdownField.Ustaw dwa pola za pomocą mapy

Mam obiekt danych Teacher z polami firstname i lastname. Tak więc w moim DropdownField chcę scalić te dwa pola i przekazać je do map().

Mój bieżący kod wygląda następująco:

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; 
    } 

Jak to możliwe, aby scalić firstname i lastname i przekazać go wewnątrz map() i odesłać go do DropdownField.

Odpowiedz

9

Możemy tworzyć funkcje get w naszym niestandardowym DataObject, aby zwracać wszelkie treści, które lubimy. Te funkcje get mogą być używane w wielu miejscach, w tym w funkcji map.

Oto jak dodać getFullName funkcję powrotu do FullName ciąg w naszym obiekcie:

class Teacher extends DataObject { 
    // ... 

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

wówczas w naszym DropdownField możemy pobierał Teacher::get()->map('ID', 'FullName') tak:

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

Nicei dzieło doskonałe . Thaks @ 3dgoo – Ivan

Powiązane problemy