我正在努力在管理员的一个成员摘要字段中添加排序功能。
我使用以下方法扩展了Silverstripe成员类:
class MyMemberExtension extends DataExtension
我在admin:
中的默认网格字段中添加了几个字段private static $db = array(
'Organisation' => 'Varchar(100)'
);
private static $summary_fields = array(
'FirstName' => 'First Name',
'Surname' => 'Surname',
'Email' => 'Email',
'OrganisationName' => 'Organisation Name',
'LastVisited' => 'Last Visited',
'NumVisit' => 'Num Visits'
);
private static $casting = array(
'OrganisationName' => 'Varchar(100)'
);
public function getOrganisationName() {
return $this->owner->Organisation;
}
......一切都很好。
但是,只有像LastVisited这样的核心字段会在列标题上给我排序箭头。
我目前担心如何在我的组织字段上实现排序。我尝试添加:
public function getCMSFields()
{
$fields = parent::getCMSFields();
$grid = $fields->dataFieldByName('Organisation');
$gridConfig = $grid->getConfig();
$gridConfig->addComponent(new GridFieldSortableHeader());
return $fields;
}
public function getEditForm($id = null, $fields = null) {
$form=parent::getEditForm($id, $fields);
$model = singleton($this->modelClass);
// add sorting if we have a field for...
if (class_exists('GridFieldSortableRows')
&& $model->hasField('Organisation')
&& $gridField=$form->Fields()->dataFieldByName($this->sanitiseClassName($this->modelClass))) {
if($gridField instanceof GridField) {
$gridField->getConfig()->addComponent(new GridFieldSortableRows('Organisation'));
}
}
return $form;
}
...到我的班级,但我不相信这些甚至被调用,因为即使我从这两个函数返回null也没有任何变化。
我找到了一些处理ModelAdmin扩展的答案,但没有针对核心成员列表。谢谢!
答案 0 :(得分:3)
首先,我不确定为什么你选择了一个名为 renderRows = () => {
const myData = require('./data.txt');
papaparse.parse(myData, {
download: true,
delimiter: '\t',
complete: function (results) {
console.log(results);
const rows = results.data.map((result, index) => (
<tr key={index}>
<td>{result}</td>
</tr>))
return (rows);
}
});
}
render() {
return (
<div>
This is table
<table>
{this.renderRows()}
</table>
</div>
); }
}
的getter,你也可以直接使用OrganisationName
?话虽如此,我认为您的问题是有效的,可能适用于不同的场景和/或字段类型。
用于编辑成员的表单字段是Organisation
中的Members
GridField。幸运的是,有一个扩展挂钩(SecurityAdmin
)来修改updateEditForm
的表单字段。
因此,为了修改成员GridField的排序,请创建如下所示的扩展名:
SecurityAdmin
并通过配置将扩展名应用于<?php
class MemberAdminExtension extends Extension
{
public function updateEditForm(Form $form)
{
/** @var GridField $memberGridField */
if ($memberGridField = $form->Fields()->dataFieldByName('Members')) {
/** @var GridFieldSortableHeader $sortHeader */
if ($sortHeader = $memberGridField->getConfig()->getComponentByType('GridFieldSortableHeader')) {
// Map OrganisationName to the Organisation field
$sortHeader->setFieldSorting([
'OrganisationName' => 'Organisation'
]);
}
}
}
}
:
SecurityAdmin
# Within _config/config.yml
SecurityAdmin:
extensions:
- MemberAdminExtension
您的会员表也应按dev/build
排序......