kakademon / orchid-tables
支持Orchid 14。Laravel Orchid的一个扩展包,用于扩展其表格处理能力,并提供一些额外的有用辅助方法。
Requires
- php: ^8.1
- orchid/platform: ^14.0
Requires (Dev)
- phpunit/phpunit: ^10.0
- squizlabs/php_codesniffer: ^3.5
Suggests
This package is auto-updated.
Last update: 2024-09-23 11:56:39 UTC
README
为Laravel Orchid提供的一个有观点的扩展包,用于扩展其表格处理能力,并提供一些额外的有用辅助方法。
支持Orchid 14
安装
通过Composer
composer require KakaDemon/orchid-tables
发布资源
php artisan vendor:publish --provider="Lintaba\OrchidTables\OrchidTablesServiceProvider"
使用方法
此包添加以下新功能:
- Checklist td - 表格的清单
- TD/Field/Layout::can, canAll - 字段、列、布局的基于权限的可见性
- Layout::html() - 布局的原始HTML
- TD扩展
- TableAdvanced - 可格式化、可点击的表格行
- QuickExport - 秒内导出datatables
Screen\TdChecklist
支持全选的清单。可以通过按下shift
键选择范围。
使用方法
use Lintaba\OrchidTables\Screen\TDChecklist; class UserTable extends Table { //... public function columns(): array { return [ TDChecklist::make(), //... TD::make('id'), ]; } }
TDChecklist::make($name = 'checkbox')
->checkboxSet(key,value)
几乎可以在TD
上使用所有可用的功能。
在不进行进一步配置的情况下,它会发送以下内容:
checkbox[] = 1
提供的集合项必须有一个getKey():int|string
方法,该方法提供复选框的值。
默认情况下,清单属于主表单,该表单与大多数操作按钮相关联,因此如果在Screen@commandBar()
中包含一个Button
,则会发送选择列表。但是模态有自己的表单,所以它不会被包含在内。目前仅支持一个表单。(如果您需要支持多个表单/模态,请随时提交工单。)
将列表表单改为模态
class UserTable extends Table { //... public function commandBar(): array { return [ ModalToggle::make("my modal")->modal('myModal'), ]; } public function columns(): array { return [ TD::Checklist::make()->checkboxSet('form','screen-modal-form-myModal'), ]; }
带有错误/成功的重定向可以保持当前选择
class UserScreen extends Screen { //... public function activateUsers(Request $request){ Alert::message('Selected item count is still ' . count($request->get('checkbox', []) ) ); $request->flash(); }
Can混入
这些被混入到Orchid的大部分可制作和可见的事物中。
TD
字段
LayoutFactory
can(string[] $permissions...)
如果当前用户没有列出的任何权限,则隐藏字段。
仅在之前没有使用canSee
隐藏它的情况下显示,并且如果用户有列出的权限中的任何一个。
canAll(string[] $permissions...)
如果当前用户没有列出的任何权限,则隐藏字段。
仅在之前没有使用canSee
隐藏它的情况下显示,并且如果用户有列出的权限中的所有权限。
两者
can
和canAll
内部使用canSee
,因此在一个can
之后链式调用另一个canSee
将使权限检查无效。
在开发模式下使用不存在的权限会抛出一个容易修复的异常,以帮助避免错误。
Layout混入
html
html(string|callable $content): self
创建一个Layout
组件,用于渲染提供的HTML字符串(或其值,如果它是闭包。)
单元格混入
日期
date(bool $withHumanReadable = true, string $format = null): self
将日期字符串或Carbon日期格式化为可读格式。默认格式为config('orchid-tables.date_format')
,config('app.date_format')
或Y?-m-d H:i
。(如果当前是当年,则省略年份。)
数字
num(int $decimals = 0, string $suffix = null, string $decimalSeparator = ',', string $thousandsSeparator = DataHelpers::NBSP): self
将数值格式化为更易读或方便的格式。
- 设置小数位数
- 可以添加后缀,使用非换行空格(nbsp)分隔,保证不会断到多行。
示例
TD::make('size')->num(2,'m²')
限制
limit(int $max = 100, string $end = '...')
保持文本在给定的最大字符数之下。如果更长,则以...(或end
中指定的任何内容)替换结尾。
bool()
根据列的值是真值还是假值,显示绿色勾选或红色叉号。
keyValues()
keyValues(int $maxDepth = 3)
显示复杂对象/数组/JSON条目的键值结构(使用dl/dt/dd
)。
限制最大深度,默认为3。
link($href, $segments = null)
创建到目标位置的链接/按钮。Both $href
和 $segments
可以是一个闭包或一个值。
示例
// article: { user: { id: 42, first: "John", last: "Doe", __toString:"John Doe" } } TD::make('user')->link(function(User $user){return route('user.show',$user->id)}), //<a href="/users/show/42">John Doe</a> TD::make('user')->link('user.create',['last','first']) //<a href="/users/show/42">Doe<br> John</a>
renderable()
尝试使用以下方式渲染模型:
- 其值,当它是标量或null时
- 作为
Personable
Persona
->presenter()
获取Personable
Persona
- 从
->display()
获取值 - 其
name
、slug
或class@id
作为最后的手段。
格式化可导出单元格
这些辅助方法与格式化Excel导出一起使用非常有用。默认情况下未激活,因为它会增加额外的开销,通常不使用。要激活,您可以在配置中设置它
# config/orchid-tables.php 'cell' => Mixins\CellExportFormattableMixin::class,
或调用以下
\Lintaba\OrchidTables\Facades\OrchidTables::mixinTdExportFormattables();
增强方法
日期
- 格式化为日期
数字
- 格式化为提供的数字格式,但存储为数字。
键值对
- 在输出中存储为json
此外,以下辅助方法也可用
####notExportable($notExportable = true): self 将列设置为不可导出。
建议在例如操作按钮上设置它。
####setStyle($style): self
一个回调,用于格式化给定的行或实际格式。可以多次调用,结果将合并。回调可以返回一个phpexcel格式化数组,或者以下之一(或多个合并在一起)
-
ExportStyles::FORMAT_NONE
-
ExportStyles::FORMAT_TEXT
-
ExportStyles::FORMAT_HUF
-
ExportStyles::FORMAT_USD
-
ExportStyles::FORMAT_EUR
-
ExportStyles::FORMAT_PCS
-
ExportStyles::FORMAT_DATE
-
ExportStyles::FORMAT_DATETIME
-
ExportStyles::FORMAT_TIME
-
ExportStyles::FORMAT_BOLD
-
ExportStyles::FORMAT_ITALIC
-
ExportStyles::FORMAT_UNDERLINED
-
ExportStyles::FORMAT_LEFT
-
ExportStyles::FORMAT_RIGHT
-
ExportStyles::FORMAT_CENTER
-
ExportStyles::FORMAT_TOP
-
ExportStyles::FORMAT_MIDDLE
-
ExportStyles::FORMAT_BOTTOM
-
ExportStyles::FORMAT_RED
-
ExportStyles::FORMAT_GREEN
-
ExportStyles::FORMAT_YELLOW
-
ExportStyles::FORMAT_BLUE
-
ExportStyles::FORMAT_BLACK
####exportRender(callable $callback): self
为Excel设置渲染器方法。输入是字段的值。必须返回一个string
或stringable
。
示例
TD::make('name')->exportRender(function(string $value, User $entry, int $rowNum){ return Str::upper($value).' #'.$entry->id.' (row-'.$rowNum.')'; })
QuickExport
使用Lintaba\OrchidTables\Exports\QuickExport
可以快速设置数据导出,无需创建额外类,只需基于现有表构建即可。
快速导出示例
use Lintaba\OrchidTables\Exports\QuickExport; use Orchid\Screen\Actions\Button; use Orchid\Screen\Screen; class UsersTableScreen extends Screen { public function commandBar(): array { return [ Button::make('export')->method('export')->rawClick(), ]; } public function export(){ $query = User::filters()->defaultSort('id', 'desc'); return (new QuickExport($query, UserTable::class))->download('userExport.xlsx'); } //...
TableAdvanced
扩展表格布局\Lintaba\OrchidTables\Screen\TableAdvanced
添加以下功能
rowClass($row)
根据行计算类列表。对于给整行着色很有用。
rowLink($row)
使行可点击。
示例
use Lintaba\OrchidTables\Screen\TableAdvanced class UserTable extends TableAdvanced { public function rowClass(User $row) { return $row->active ? 'bg-success' : 'bg-danger'; } public function rowLink(User $row) { return route('admin.users.show',$row); } //...
自定义
运行以下命令以发布配置
php artisan vendor:publish --tag="orchid-tables.config"
# /config/orchid-tables.php use Lintaba\OrchidTables\Mixins; return [ 'mixins' => [ 'can' => Mixins\CanMixin::class, 'cell' => Mixins\CellMixin::class, 'layout' => Mixins\LayoutMixin::class, ], 'date_format' => null, ];
根据现有的混入,扩展或创建您的覆盖,例如\Lintaba\OrchidTables\CellMixin
。您可以通过将这些混入的键设置为null
来开启或关闭它们中的任何一个。
变更日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
贡献
请参阅contributing.md并打开工单以获取详细信息和工作清单。
致谢
许可证
MIT。请参阅许可证文件获取更多信息。