Silverstripe 3.2 — Как управлять различными списками одних и тех же объектов данных в ModelAdmin на разных вкладках

Я хотел бы управлять различными отфильтрованными списками одного и того же объекта DataObject в ModelAdmin. У меня есть DataObject «Сообщение», который имеет SentbyID и SenttoID. В ModelAdmin я хочу управлять двумя списками. Один список со всеми сообщениями с определенным SentbyID и один список с сообщениями с определенным SenttoID. Могу ли я управлять этими двумя списками на разных вкладках, например «Входящие» и «Исходящие»? Как я могу это сделать?

У меня есть это до сих пор:

class MessageAdmin extends ModelAdmin {

private static $menu_title = 'Messages';

private static $url_segment = 'messages';

private static $managed_models = array (
'Message'
);

public function getList() {
$currMember = Member::currentUserID();
$list = Message::get()->filter(array('SenttoID' => $currMember));
return $list;
}

}

3

Решение

Перегрузите getEditForm и определите новый FieldList, содержащий TabSet. Модуль комментариев SilverStripe предоставляет отличный пример этого в действии, показывая различные типы комментариев (спам и модерируемый) на отдельных вкладках в пределах того же ModelAdmin.

Посмотри на https://github.com/silverstripe/silverstripe-comments/blob/2.1/code/admin/CommentAdmin.php

2

Другие решения

Вы должны обработать его с помощью двух разных ModelAdmin, например, переименовав MessageAdmin в ReceivedMessageAdmin и создав новый SentMessageAdmin, как показано ниже:

class SentMessageAdmin extends ModelAdmin {

private static $menu_title = 'Sent Messages';

private static $url_segment = 'sent-messages';

private static $managed_models = array (
'Message'
);

public function getList() {
$currMember = Member::currentUserID();
$list = Message::get()->filter(array('SentbyID' => $currMember));
return $list;
}

}
1