Ich habe eine many_many
Beziehung zwischen meinem Theses
und Subjects
. Ich erstellte eine ListboxField
w/c akzeptiert mehrere Werte.SilverStripe ListboxField Multiselect Sortieren nach Benutzer wählen
Speichern in der Datenbank war kein Problem, aber wenn ich die Informationen erneut anzeigen, sortiert der Betreff die Benutzerauswahlbasis auf ID
des Betreffs.
Zum Beispiel wählt der Benutzer die Reihenfolge [1,5,4,2]
. Einmal gespeichert und erneut angezeigt wird es wie folgt angezeigt [1,2,4,5]
.
Hier ist mein Code:
Theses.php
class Theses extends DataObject {
private static $db = array(
'CallNo' => 'Varchar',
'AuthorID' => 'Int',
'TitleTH' => 'Text',
'Year' => 'Int(4)',
'PhysicalDesc' => 'Text',
'Notes' => 'Text',
'Summary' => 'Text',
'DegreeCourse' => 'Varchar'
);
private static $has_one = array(
'Author' => 'Author'
);
private static $field_labels = array(
'CallNo' => 'Call Number',
'TitleTH' => 'Title Headings',
'Author.AuthorName' => 'Author',
'DegreeCourse' => 'Degree Course',
'Year' => 'Year Published',
'SubjectsString' => 'Subject'
);
private static $summary_fields = array(
'CallNo' => 'CallNo',
'TitleTH' => 'TitleTH',
'Author.AuthorName',
'DegreeCourse',
'Year' => 'Year',
'SubjectsString'
);
private static $many_many = array(
'Subjects' => 'Subject'
);
public function SubjectsString() {
$returnString = '';
foreach ($this->Subjects()->sort('Theses_Subjects.Created') as $Subjects) {
$returnString .= $Subjects->SubjectTitle . '--';
}
return $returnString;
}
public function getCMSfields() {
$fields = FieldList::create(TabSet::create('Root'));
$fields->addFieldsToTab('Root.Main', array(
TextField::create('CallNo'),
DropdownField::create('AuthorID', 'AuthorName')
->setSource(Author::get()->sort('AuthorName')->map('ID', 'AuthorName')),
TextField::create('TitleTH'),
NumericField::create('Year', 'Year')
->setMaxLength(4),
TextField::create('PhysicalDesc'),
TextField::create('Notes'),
TextAreaField::create('Summary'),
DropdownField::create('DegreeCourse', 'DegreeCourse', array('BLIS' => 'BLIS', 'BLS' => 'BLS', 'MLIS' => 'MLIS', 'MLS' => 'MLS')),
ListboxField::create('Subjects', 'Subjects', Subject::get()->map('ID', 'SubjectTitle')->toArray(), 1, 4, true),
));
return $fields;
}
}
Subject.php
class Subject extends DataObject {
private static $db = array(
'SubjectTitle' => 'Varchar'
);
private static $belongs_many_many = array(
'Theses' => 'Theses'
);
public function canView($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canEdit($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canDelete($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
public function canCreate($member = null) {
return Permission::check('CMS_ACCESS_MyAdmin', 'any', $member);
}
private static $summary_fields = array(
'SubjectTitle'
);
}