gobrightspot / nova-detached-actions
一个 Laravel Nova 工具,允许将操作放置在 Nova 工具栏中,独立于复选框选择机制。
Requires
- php: >=7.1.0
- laravel/nova: ^3.0
- dev-master
- 1.1.1
- 1.1.0
- 1.0.9
- 1.0.8
- 1.0.7
- 1.0.6
- 1.0.5
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/npm_and_yarn/json5-1.0.2
- dev-dependabot/npm_and_yarn/decode-uri-component-0.2.2
- dev-dependabot/npm_and_yarn/loader-utils-and-loader-utils-and-resolve-url-loader-2.0.4
- dev-nova-primary-buttons-style
- dev-interoperable-custom-toolbars
This package is auto-updated.
Last update: 2023-05-20 22:37:06 UTC
README
弃用通知 ⚠️
GoBrightspot 已停止维护此项目。请进行分支以便继续开发。
简介
一个 Laravel Nova 工具,允许在 Nova 工具栏中放置操作,与复选框选择机制分离。
⚠️ 请注意,由于操作与资源表中的行选择复选框分离,您将没有可以迭代的模型集合。分离操作旨在独立于表中的选择。
⚠️ 另外,请注意,枢轴操作不受支持,并且尚未经过测试。
安装
您可以通过 composer 将包安装到使用 Nova 的 Laravel 应用中
composer require gobrightspot/nova-detached-actions
工具将通过 ToolServiceProvider
自动注册
用法
创建自定义 Nova 操作文件
php artisan nova:action ExportUsers
而不是通过 Laravel\Nova\Actions\Action
类扩展 ExportUsers
类,用 Brightspot\Nova\Tools\DetachedActions\DetachedAction
类替换它。
由于我们不会收到 $models
集合,您可以从 handle
方法中删除该变量,使签名变为 public function handle(ActionFields $fields)
。
您还可以通过重写 label()
方法来自定义按钮标签。如果您不重写标签,它将 'humanize' 类名,例如 ExportUsers
将成为 Export Users
。
默认情况下,分离操作仅出现在索引工具栏上。
如果您还希望在资源索引视图(当用户通过复选框选择行时)中显示操作,请设置 $public $showOnIndex = true;
如果您还希望在资源详情视图中显示操作(当用户从下拉菜单中选择操作时),请设置 $public $showOnDetail = true;
以下是一个完整的示例
<?php namespace App\Nova\Actions; use Brightspot\Nova\Tools\DetachedActions\DetachedAction; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Laravel\Nova\Fields\ActionFields; class ExportUsers extends DetachedAction { use InteractsWithQueue, Queueable, SerializesModels; /** * Get the displayable label of the button. * * @return string */ public function label() { return __('Export Users'); } /** * Perform the action. * * @param ActionFields $fields * * @return mixed */ public function handle(ActionFields $fields) { // Do work to export records return DetachedAction::message('It worked!'); } /** * Get the fields available on the action. * * @return array */ public function fields() { return []; } }
在您的资源上注册操作
/** * Get the actions available for the resource. * * @param \Illuminate\Http\Request $request * @return array */ public function actions(Request $request) { return [ new App\Nova\Actions\ExportUsers ]; }
分块和重复调用 handle()
如果在后台启动操作,Nova 将将总记录数分成块,并为每个块调用您的 DetachedAction 的 handle()
函数。这可能会对性能产生意外影响,因为系统将为每个记录块执行您的操作。这发生在 \Laravel\Nova\Actions\Action.php
的 handleRequest()
函数中。
为了防止这种情况,最简单的方法是在您的 DetachedAction
中覆盖此函数。这是一个仅调度作业而不进行任何检查或其他逻辑的裸示例
/** @return array<int,string> */ public function handleRequest(ActionRequest $request): array { dispatch(new GenerateTicketReport($request->resolveFields())); return DetachedAction::message('Nice job!'); }
在不同屏幕上显示
showOnIndexToolbar()
在索引页工具栏上显示分离的动作按钮(即默认位置)。在索引网格动作下拉菜单中不显示。
onlyOnIndexToolbar()
仅在索引工具栏上显示分离的动作按钮。不要在其他任何地方显示它们。
exceptOnIndexToolbar
在索引工具栏以外的所有地方显示分离的动作按钮。
onlyOnIndex
仅在索引视图中显示分离的动作按钮。允许它们在standalone
下拉菜单或在网格动作下拉菜单中显示。
showOnDetailToolbar()
在详情页工具栏上显示分离的动作按钮(即默认位置)。
onlyOnDetailToolbar()
仅在索引工具栏上显示分离的动作按钮。不要在其他任何地方显示它们。
exceptOnDetailToolbar
在详情工具栏以外的所有地方显示分离的动作按钮。
onlyOnDetail
仅在详情视图中显示分离的动作按钮。允许它们在standalone
下拉菜单或动作下拉菜单中显示。
与Laravel Nova Excel的DownloadExcel
动作使用
您可以通过使用withMeta()
简单地传递一些额外的数据,轻松地将DetachedAction
工具与Laravel Nova Excel的DownloadExcel
动作集成。
/** * Get the actions available for the resource. * * @param \Illuminate\Http\Request $request * @return array */ public function actions(Request $request) { return [ (new DownloadExcel)->withHeadings()->askForWriterType()->withMeta([ 'detachedAction' => true, 'label' => 'Export', 'name' => 'Export', 'showOnIndexToolbar' => true ])->confirmButtonText('Export'), ]; }
自定义按钮
可见按钮与不可见按钮
默认情况下,该组件将显示前三个按钮,其余的按钮放入下拉菜单中。如果您想更改每个资源上可见的按钮数量,可以通过使用additionalInformation
方法来实现,如下所示
public static function additionalInformation(Request $request) { return [ 'visibleActionsLimit' => 4 ]; }
您还可以更改图标类型,以及是否显示不可见动作菜单的向下箭头
public static function additionalInformation(Request $request) { return [ 'visibleActionsLimit' => 2, 'showInvisibleActionsArrow' => true, 'invisibleActionsIcon' => 'menu' ]; }
自定义按钮类
该软件包附带一些常见的默认HTML类,这些类应用于动作按钮。在组件中,我们自动分配以下
btn btn-default ml-3 detached-action-button flex justify-center items-center
动作按钮是按钮,因此合理地将btn
和btn-default
类分配给它们,我们还想在按钮之间保持一致的间距,因此我们应用ml-3
,并且为了在按钮内对齐图标和文本,我们使用flex justify-center items-center
。此外,为了允许主题开发者设置特定的类名以挂钩,我们在索引和详情视图中都应用了detached-action-button
。
在这些类的基础上,DetachedAction
类提供了默认的btn-primary
,这将给按钮提供默认的按钮颜色,即在默认Nova主题中为蓝色。
开发人员可以在运行时添加类,使用DetachedAction
类上的extraClassesWithDefault()
和extraClasses()
方法。
extraClassesWithDefault()
方法
如果您想保留默认的类但添加额外的类,那么您可能需要使用此方法。您可以传递一个包含单个类名的数组或由空格分隔的多个类名。
return [ (new ImportUsers)->extraClassesWithDefault('bg-info') ];
extraClasses()
方法
您可以使用任何 tailwind/nova 类。
return [ (new ImportUsers)->extraClasses('bg-logo text-white hover:black') ];
添加图标
您可以通过指定小写的图标名称来使用任何 104 个 Heroicon 图标。
return [ (new ImportUsers)->icon('add') ];
您还可以使用 iconClasses
来自定义该图标的显示。
return [ (new ImportUsers)->icon('upload')->iconClasses('mr-3 -ml-2') ];
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。