m-a-k-o / nova-custom-table-card
Nova自定义表格卡片。以卡片形式展示您最新的数据(订单、帖子等)或您选择的数据。
4.0.1
2022-08-12 14:17 UTC
Requires
- php: ^8.1
- laravel/nova: ^4.0
This package is auto-updated.
Last update: 2024-09-16 18:00:17 UTC
README
简单的Nova自定义表格卡片
简单的卡片表格,展示您选择的数据。
它可以用于最新的订单列表或最新的帖子等。
注意:本文档仅适用于版本 > 2.*
版本2新增:刷新(重新加载),可以给单元格添加id和class
版本3: 已移除刷新功能,修复了多个仪表板的问题
版本4:增加对Nova v. 4的兼容性
安装
您可以通过composer将此包安装到使用Nova的Laravel应用中
composer require m-a-k-o/nova-custom-table-card
您必须使用NovaServiceProvider注册卡片
// in app/Providers/NovaServiceProvder.php // ... public function cards() { return [ // ... // all the parameters are required excelpt title new \Mako\CustomTableCard\CustomTableCard( array $header, array $data, string $title, array $viewAll ), ]; }
使用示例
// ... public function cards() { return [ // ... // all the parameters are required new \Mako\CustomTableCard\CustomTableCard( [ new \Mako\CustomTableCard\Table\Cell('Order Number'), // Set sortable to true in a header Cell to allow its column's sorting (new \Mako\CustomTableCard\Table\Cell('Price'))->sortable(true)->class('text-right'), ], // header [ (new \Mako\CustomTableCard\Table\Row( new \Mako\CustomTableCard\Table\Cell('2018091001'), (new \Mako\CustomTableCard\Table\Cell('20.50'))->class('text-right')->id('price-2') ))->viewLink('/resources/orders/1'), (new \Mako\CustomTableCard\Table\Row( new \Mako\CustomTableCard\Table\Cell('2018091002'), (new \Mako\CustomTableCard\Table\Cell('201.25'))->class('text-right')->id('price-2') )), ], // data 'Orders', // title ['label' => 'View All', 'link' => '/resources/orders'], // View All ), ]; }
或
// ... public function cards() { return [ // ... // all the parameters are required except title (new \Mako\CustomTableCard\CustomTableCard) ->header([ new \Mako\CustomTableCard\Table\Cell('Order Number'), // Set sortable to true in a header Cell to allow its column's sorting (new \Mako\CustomTableCard\Table\Cell('Price'))->sortable(true)->class('text-right'), ]) ->data([ (new \Mako\CustomTableCard\Table\Row( new \Mako\CustomTableCard\Table\Cell('2018091001'), (new \Mako\CustomTableCard\Table\Cell('20.50'))->class('text-right')->id('price-2') ))->viewLink('/resources/orders/1'), (new \Mako\CustomTableCard\Table\Row( new \Mako\CustomTableCard\Table\Cell('2018091002'), (new \Mako\CustomTableCard\Table\Cell('201.25'))->class('text-right')->id('price-2') )), ]) ->title('Orders') ->viewAll(['label' => 'View All', 'link' => '/resources/orders']), ]; }
或
您可以在示例的Nova/Cards目录下创建自己的类,该类将扩展\Mako\CustomTableCard\CustomTableCard。
在这个独立的类中,您可以通过优雅的方式从模型中获取数据。
<?php namespace App\Nova\Cards; use App\Models\Order; class LatestOrders extends \Mako\CustomTableCard\CustomTableCard { public function __construct() { $header = collect(['Date', 'Order Number', 'Status', 'Price', 'Name']); $this->title('Latest Orders'); $this->viewAll(['label' => 'View All', 'link' => '/resources/orders']); // $orders = Order::all(); // Data from you model $orders = collect([ ['date' => '2018-12-01', 'order_number' => '2018120101', 'status' => 'Ordered', 'price' => '20.55', 'name' => 'John Doe'], ['date' => '2018-12-01', 'order_number' => '2018120101', 'status' => 'Ordered', 'price' => '20.55', 'name' => 'John Doe'], ['date' => '2018-12-01', 'order_number' => '2018120101', 'status' => 'Ordered', 'price' => '20.55', 'name' => 'John Doe'], ['date' => '2018-12-01', 'order_number' => '2018120101', 'status' => 'Ordered', 'price' => '20.55', 'name' => 'John Doe'], ['date' => '2018-12-01', 'order_number' => '2018120101', 'status' => 'Ordered', 'price' => '20.55', 'name' => 'John Doe'], ['date' => '2018-12-01', 'order_number' => '2018120101', 'status' => 'Ordered', 'price' => '20.55', 'name' => 'John Doe'], ]); $this->header($header->map(function($value) { // Make the Status column sortable return ($value === 'Status') ? (new \Mako\CustomTableCard\Table\Cell($value))->sortable(true) : new \Mako\CustomTableCard\Table\Cell($value); })->toArray()); $this->data($orders->map(function($order) { return new \Mako\CustomTableCard\Table\Row( new \Mako\CustomTableCard\Table\Cell($order['date']), new \Mako\CustomTableCard\Table\Cell($order['order_number']), // Instead of alphabetically ordering the status, set a sortableData value for better representation (new \Mako\CustomTableCard\Table\Cell($order['status'])->sortableData($this->getStatusSortableData($order['status']))), new \Mako\CustomTableCard\Table\Cell($order['price']), new \Mako\CustomTableCard\Table\Cell($order['name']) ); })->toArray()); } private function getStatusSortableData (string $status) : int { switch ($status) { case 'Ordered': return 1; default: return 0. } } }
然后,在NovaServiceProvider.php中注册您的自定义类
protected function cards() { return [ ...... new \App\Nova\Cards\LatestOrders, ]; }
注意:如果您没有指定视图或查看所有,显示图标将不可见。
表格样式定制
要显示更多数据在您的表格中,您可以使用“紧凑”表格样式选项,该选项旨在增加表格行的视觉密度。
protected function cards() { return [ ... \Mako\CustomTableCard\CustomTableCard::make( ... )->style('tight'), ]; }
或者覆盖您自定义类上的$style
属性
public $style = 'tight';