undefinedoffset / sortablegridfield
为 Silverstripe 的 GridField 添加拖放功能
Requires
- silverstripe/framework: ~4.11 | ^5
- silverstripe/versioned: ^1 | ^2
Requires (Dev)
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ~3.4
- 2.2.0
- 2.1.0
- 2.0.x-dev
- dev-master / 2.0.x-dev
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 2.0.0-beta2
- 2.0.0-beta1
- 2.0.0-alpha1
- 1.0.x-dev
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.6.10
- 0.6.9
- 0.6.8
- 0.6.7
- 0.6.6
- 0.6.5
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6.0
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.2
- 0.3.1
- 0.3.0
- 0.2.1
- 0.2.0
- 0.1.3
- 0.1.2
- 0.1.1
- 0.1.0
This package is auto-updated.
Last update: 2024-09-13 15:04:09 UTC
README
为 Silverstripe 的 GridField 添加拖放功能
要求
- Silverstripe 4.11+ 或 5.0+
安装
安装仅通过 composer 支持
composer require undefinedoffset/sortablegridfield
- 运行
dev/build?flush=all
重新生成清单 - 进入 CMS 并首次使用
GridFieldSortableRows
组件时,您可能需要在地址末尾添加?flush=all
以强制重新生成模板
用法
要启用对 has_many
关系的排序,在您的数据对象上设置一个整数字段。对于 has_many
关系,请确保将 $default_sort
设置在 DataObject
上为此新整数字段,以确保在请求关系时应用排序顺序。对于 many_many
关系,您必须在 DataObject
上添加一个定义关系的 $many_many_extraFields
静态,有关更多信息,请参阅 SilverStripe 文档。如果您正在使用 many_many
关系,您需要执行自定义获取器来设置此关系的排序顺序,以便在前端使用,下面是示例。此外,对于 many_many
关系,GridField 的名称 必须 与关系名称相同,否则将发生错误。对于新的 DataObject
,您不需要在您的 DataObject
中自行递增排序顺序,GridFieldSortableRows
将在下次显示网格时自动执行此操作。
public function getMyManyManyRelationship() { return $this->getManyManyComponents('MyManyManyRelationship')->sort('SortColumn'); }
要启用 GridField 上的拖放排序,请将以下内容添加到您的 GridField 配置中,同时确保将命名空间 UndefinedOffset\SortableGridField\Forms
添加到您的文件中。
//Namespace imports should be added to the top of your file use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows; $myGridConfig->addComponent(new GridFieldSortableRows('{Column to store sort}'));
要将项目移动到另一个页面,请将行拖动到 GridField 左右两侧的相应移动到页面按钮上,然后释放。
完整代码示例
事件
GridFieldSortableRows
提供 4 个 "事件",分别为 onBeforeGridFieldRowSort()
、onAfterGridFieldRowSort()
、onBeforeGridFieldPageSort()
和 onAfterGridFieldPageSort()
。这些 "事件" 传递给 GridFieldSortableRows
中使用的 DataList
的一个副本,在页面排序的情况下,此列表显示当前页面加减一个对象。对于在 ModelAdmin
后代上的 GridFieldSortableRows
,如果这些事件没有拥有者 DataObject
,则在这些事件上调用 ModelAdmin
,如果您正在使用 GridFieldSortableRows
在 GridField
上对一个 DataObject
的关系进行操作,则在这些事件上调用该 DataObject
。
追加到顶部而不是底部
默认情况下,为了在大数据集上的性能,GridFieldSortableRows
将新记录追加到列表的底部,但是您可以通过在您的 GridFieldSortableRows
实例上调用 setAppendToTop(true)
来设置新记录追加到顶部。
//Namespace imports should be added to the top of your file use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows; $myGridConfig->addComponent($sortable = new GridFieldSortableRows('SortOrder')); $sortable->setAppendToTop(true);
处理版本化记录
默认情况下,GridFieldSortableRows
不会更新版本化以外的任何其他阶段,但是您可以通过调用 setUpdateVersionedStage()
并传递要更新的阶段名称以及基本阶段来启用此功能。例如,传递 "Live" 将在任何排序发生时也更新 "Live" 阶段。
//Namespace imports should be added to the top of your file use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows; $myGridConfig->addComponent($sortable = new GridFieldSortableRows('SortOrder')); $sortable->setUpdateVersionedStage('Live');
重写默认关系名称
默认情况下,关系名称来自 GridField
的名称,但您可以通过调用 setCustomRelationName()
并传入关系名称来覆盖此查找。这允许您在同一个表单上具有多个 GridFields
,它们与同一个 many_many
列交互,可能略有不同。
//Namespace imports should be added to the top of your file use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows; $myGridConfig->addComponent($sortable = new GridFieldSortableRows('SortOrder')); $sortable->setCustomRelationName('MyRelationship');
报告问题
在报告问题时,请确保您指定正在使用 SilverStripe 的哪个版本,例如 3.0.5、3.1beta3、3.0-master 等。还请确保包含您收到的任何 JavaScript 或 PHP 错误,对于 PHP 错误,请确保包含完整的堆栈跟踪。还请包括您的实现代码(设置网格字段的地方)以及您如何产生该问题。您可能还需要提供一些类以帮助重现问题。坚持问题,记住您看到的是问题而不是模块维护者,所以可能需要很多问题才能找到解决方案或答案。
备注
- 在使用 GridFieldManyRelationHandler 时,请确保在例如
GridFieldManyRelationHandler
之前将 GridFieldSortableRows 添加到您的配置中。
//Namespace imports should be added to the top of your file use UndefinedOffset\SortableGridField\Forms\GridFieldSortableRows; $config->addComponent(new GridFieldSortableRows('SortOrder'), 'GridFieldManyRelationHandler');
贡献
翻译
自然语言字符串的翻译通过第三方翻译界面 transifex.com 管理。新添加的字符串将定期上传到那里进行翻译,任何新的翻译都将合并到项目源代码中。
请使用 https://www.transifex.com/projects/p/silverstripe-sortablegridfield 来贡献翻译,而不是发送带有 YAML 文件的拉取请求。