我有一个页面显示组中的成员列表,但我需要更改组成员的排序。我认为最明智的方法是向页面类型添加一个关系编辑器,并通过数据扩展添加排序顺序
这是我在组上的扩展
class MyGroup extends DataExtension {
static $many_many_extraFields = array(
'Members' => array(
'SortOrder' => "Int"
)
);
}
在页面上,我有以下内容:
if($this->GroupID != 0 && Permission::check("APPLY_ROLES")) {
$group = Group::get()->byID($this->GroupID);
$fields->addFieldsToTab("Root.Members", array(
GridField::create(
"Members",
"Members",
$group->DirectMembers(),
GridFieldConfig_RelationEditor::create()->addComponents(
new GridFieldSortableRows('SortOrder')
)
)
));
}
当我尝试对成员进行排序时,出现错误
Uncaught SS_DatabaseException: Couldn't run query:
UPDATE "" SET "SortOrder" = 1 WHERE "" = 12 AND "" = 18
我不确定为什么网格字段没有得到列
您可以在用于
网格字段的列表中定义排序顺序
$group->DirectMembers()->sort('Whatever')
如果要手动对它们进行排序,请查看 https://github.com/silverstripe-australia/silverstripe-gridfieldextensions 或 https://github.com/UndefinedOffset/SortableGridField。
这两个模块都使您可以通过拖放对条目进行排序。