square1 / nova-metrics
为您的Laravel Nova指标添加对资源筛选器的支持
1.0.0
2020-02-03 14:57 UTC
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-08-29 05:07:14 UTC
README
此包允许您访问任何Laravel Nova指标类中的资源筛选器,并在您在资源列表中选择新筛选器时动态更新这些卡片。
图表是显示仪表板图形信息的好方法,并且使用Laravel Nova可以快速创建漂亮的指标卡片。
您还可以将这些图表用于资源视图。
通常,当您将指标添加到任何资源中时,您期望图表是您在下面列表中看到的数据的表示。目前,在Nova中这是不可能的——当您更改筛选器选择时,资源列表会更新,但相应的图表不会。
这是因为填充列表的请求与获取指标数据的请求是独立的。这意味着更新筛选器会中断与图表的连接,使它们过时。
此包恢复该连接,确保屏幕上的图表和数据保持同步。
安装
通过composer安装
composer require square1/nova-metrics
用法
您可以使用默认的nova命令创建新的指标
php artisan nova:partition NewPartition php artisan nova:trend NewTrend php artisan nova:value NewValue
然后,您只需更新您最近创建的指标类。从以下类之一扩展以访问您的资源筛选器
use Square1\NovaMetrics\CustomTrend; use Square1\NovaMetrics\CustomValue; use Square1\NovaMetrics\CustomPartition;
例如
<?php namespace App\Nova\Metrics; use App\Post; use Square1\NovaMetrics\CustomTrend; use Laravel\Nova\Http\Requests\NovaRequest; class NewTrend extends CustomTrend { public function calculate(NovaRequest $request) { // $request->filters } }
假设您有一个CategoryFilter::class
<?php namespace App\Nova\Filters; use Illuminate\Http\Request; use Laravel\Nova\Filters\Filter; class CategoryFilter extends Filter { public $component = 'select-filter'; public function apply(Request $request, $query, $value) { return $query->where('category', $value); } public function options(Request $request) { return [ 'css' => 'css', 'javascript' => 'javascript', 'laravel' =>'laravel', 'php' => 'php', ]; } }
这是如何将此筛选器应用于您的NewTrend::class
class NewTrend extends CustomTrend { public function calculate(NovaRequest $request) { $model = Post::make(); if (!empty($filters)) { if ($request->has('filters')) { // Get the decoded list of filters $filters = json_decode(base64_decode($request->filters)); foreach ($filters as $filter) { if (empty($filter->value)) { continue; } // Create a new instance of the filter and apply the query to your model $model = (new $filter->class)->apply($request, $model, $filter->value); } } } return $this->averageByDays($request, $model, 'pageviews'); } }
已知问题
如果您想为此包做出贡献,这是一个好开始的地方 🙂
- 等待第一个
resources-loaded
事件触发以加载卡片。 - 在请求对象中解码
$request->filters
。
致谢
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。