unclecheese / betterbuttons
为GridField详细表单添加新的表单操作和按钮,以增强可用性。
Requires
- silverstripe/framework: ^4.0@dev
- 3.0.x-dev
- dev-master / 2.x-dev
- 1.3.x-dev
- 1.3.15
- 1.3.14
- 1.3.13
- 1.3.12
- 1.3.11
- 1.3.10
- 1.3.9
- 1.3.8
- 1.3.7
- 1.3.6
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.11
- 1.2.10
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-feature/ss4-upgrade
- dev-feature/confirmation
- dev-revert-111-feature/success-message-changes
- dev-versions
- dev-config
This package is auto-updated.
Last update: 2024-09-11 12:21:12 UTC
README
silverstripe/silverstripe-admin#436
但我现在就想用!
如果你想在合并之前使用SS4,可以使用这个分支。
修改GridFields的详细表单,使用更友好的操作,包括
- 保存并添加另一个:创建一个记录,然后直接添加另一个,无需点击后退按钮,然后再添加。
- 保存并关闭:保存记录并返回列表视图
- 用户友好的删除:从建设性操作板中提取出来并移开,因此不太可能意外点击。包括操作内联确认而不是浏览器警告框。
- 取消:与后退按钮相同,但位置更方便
- 前一条/下一条记录:在不返回列表视图的情况下导航到列表中的前一条或下一条记录
- 前端链接:如果你的DataObject有一个Link()方法,可以一键获取草稿站点和已发布站点的链接,以在单次点击中查看记录的上下文
- 版本控制:保存、保存并发布、回滚、取消发布
- 可配置UI:将按钮添加到顶部(工具)或底部(操作)。
- 消除歧义的选项卡:在模型管理中,顶部的选项卡在模型之间切换。在详细视图中,它们在字段组之间切换,这可能会创建一个令人困惑的用户体验。Better Buttons将字段分组为它们在CMSMain中的样子,在主编辑区域中使用选项卡组。
- 添加您自己的自定义操作!
在详细视图中创建自定义操作
要求
SilverStripe 4.0或更高版本
安装
composer require unclecheese/betterbuttons 2.x-dev
自定义按钮集合
哪些按钮应该出现在哪里会有所不同,因为用户的偏好不同。BetterButtons为GridField详细表单中的“创建”和“编辑”视图提供了一组默认按钮集合,但这些可以在config.yml文件中轻松覆盖。
默认配置
BetterButtonsUtils:
edit:
BetterButtonPrevNextAction: true
BetterButton_New: true
versioned_edit:
BetterButtonPrevNextAction: true
BetterButton_New: true
BetterButtonsActions:
create:
BetterButton_Save: true
BetterButton_SaveAndClose: true
edit:
BetterButton_Save: true
BetterButton_SaveAndClose: true
BetterButton_Delete: true
BetterButtonFrontendLinksAction: true
versioned_create:
BetterButton_SaveDraft: true
BetterButton_Publish: true
versioned_edit:
BetterButton_SaveDraft: true
BetterButton_Publish: true
Group_Versioning: true
BetterButton_Delete: true
BetterButtonFrontendLinksAction: true
BetterButtonsGroups:
SaveAnd:
label: Save and...
buttons:
BetterButton_SaveAndAdd: true
BetterButton_SaveAndClose: true
BetterButton_SaveAndNext: true
BetterButton_SaveAndPrev: true
Versioning:
label: Versioning...
buttons:
BetterButton_Rollback: true
BetterButton_Unpublish: true
在YAML定义中,每个按钮类型都分配了一个符号。它可以放置在任何地方,任何次数。此外,它可以放置在命名组中,前提是该组已在BetterButtonsGroups节点中定义。按钮组是一个带有标签的单个按钮,点击时会显示一系列选项。
由于Config层的数组合并具有特殊性,按钮必须定义为开或关(true或false)。要删除默认配置中的按钮,必须在项目配置中显式将其设置为false。以下是一个示例自定义配置。
BetterButtonsActions:
edit:
BetterButton_Save: false
Group_SaveAnd: false
Group_MyGroup: true
BetterButtonsGroups:
MyGroup:
label: This is a group
buttons:
BetterButton_Save: true
BetterButton_SaveAndNext: true
创建组时,请确保不要重复任何组外部的按钮,因为具有相同名称的表单字段不能在表单中出现两次。
创建自定义操作
以下示例中,我们将创建一个GridField详细表单中的自定义操作,用于将DataObject更新为“批准”或“拒绝”。
我们可以在两个地方添加操作
- 操作在表单底部(例如保存、取消)
- 工具在表单右上角(例如新建记录、上一条/下一条)
首先,我们将根据按钮需要在UI中显示的位置,重载模型的getBetterButtonsActions
或getBetterButtonsUtils
方法。
public function getBetterButtonsActions() { $fields = parent::getBetterButtonsActions(); if($this->IsApproved) { $fields->push(BetterButtonCustomAction::create('deny', 'Deny')); } else { $fields->push(BetterButtonCustomAction::create('approve', 'Approve')); } return $fields; }
BetterButtonCustomAction
对象接收调用模型上方法的参数("拒绝"或"批准"),以及按钮的标签。
现在让我们向DataObject添加方法。
public function approve() { $this->IsApproved = true; $this->write(); } public function deny() { $this->IsApproved = false; $this->write(); }
最后,出于安全考虑,我们需要将这些方法列入白名单,允许GridField表单调用。这与控制器中的$allowed_actions
非常类似。
private static $better_buttons_actions = array ( 'approve', 'deny' );
现在UI中有了新的按钮!
个性化用户体验
确保在点击"批准"或"拒绝"后,表单刷新。
$fields->push( BetterButtonCustomAction::create('deny', 'Deny') ->setRedirectType(BetterButtonCustomAction::REFRESH) );
重定向类型可以使用常量
BetterButtonCustomAction::REFRESH BetterButtonCustomAction::GOBACK
刷新表单,或分别返回到列表视图。
此外,我们可以在我们的方法中返回一个消息,以添加成功消息,该消息将在操作完成后渲染。
public function deny() { $this->IsApproved = false; $this->write(); return 'Denied for publication'; }
定义任意链接
有时,你可能根本不想向控制器发送请求。为此,有一个更简单的BetterButtonLink
类。
$fields->push( new BetterButtonLink( 'View on Meetup.com', $this->MeetUpLink ) );
创建嵌套表单
你可能有一个需要提示用户输入的操作,例如在订单记录上"发送此客户消息"。对于这类复杂操作,你可以使用BetterButtonNestedForm
。
public function getBetterButtonsActions() { $f = parent::getBetterButtonsActions(); $f->push(BetterButtonNestedForm::create('sendmessage','Send this customer a message', FieldList::create( TextareaField::create('Content') ))); return $f; }
在这种情况下,你的动作处理程序接收$data
和$form
,就像控制器一样。
public function sendmessage ($data, $form) { $message = Message::create(array ( 'OrderID' => $this->ID, 'Content' => $data['Content'] )); $message->write(); $form->sessionMessage('Message sent','good'); }
禁用Better按钮
有时,你可能需要在某些类上禁用Better按钮。你可以通过YML配置将静态better_buttons_enabled
更改为false来实现。
MyBetterButtonLessClass better_buttons_enabled: false