norman-huth/nova-resource-card

一个 Laravel Nova 卡片。

v1.0.4-beta.1 2024-03-08 20:29 UTC

This package is auto-updated.

Last update: 2024-09-08 21:31:49 UTC


README

使用此包,您可以将 Nova 资源索引用作卡片。
(例如在仪表板或其他 Nova 资源中)

限制

  • 无搜索
  • 无分页
  • 无操作
  • 无卡片

Dashboard Preview Resource Preview Preview with footer link

来自 example-app-nvpRt7 的示例

此包将在一段时间内扩展。关注此包以获取更新。
对于建议和愿望,请 创建一个问题

安装

composer require norman-huth/nova-resource-card

用法

以下用法示例使用 Laravel Nova 用户资源类作为示例。

将 Nova 资源卡片添加到仪表板

use NormanHuth\NovaResourceCard\NovaResourceCard;

class Main extends Dashboard
{
    /**
     * Get the cards for the dashboard.
     *
     * @return array
     */
    public function cards(): array
    {
        return [
            new NovaResourceCard(\App\Nova\Resources\User::class)
        ];
    }
}

将 Nova 资源卡片添加到其他 Nova 资源

use NormanHuth\NovaResourceCard\NovaResourceCard;

class User extends Resource
{
    /**
     * Get the cards available for the request.
     *
     * @param NovaRequest $request
     * @return array
     */
    public function cards(NovaRequest $request): array
    {
        return [
            new NovaResourceCard(\App\Nova\Resources\User::class),
        ];
    }
}

卡片方法

激活资源索引的页脚链接

使用 setFooterLinkLabel 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))->setFooterLinkLabel(__('To All Users'))

使用其他 Nova 资源作为页脚链接目标

使用 setFooterLinkResource 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))
    ->setFooterLinkLabel(__('Go To Orders'))
    ->setFooterLinkResource(\App\Nova\Resources\Order::class)

使用外部 URL 作为页脚链接

使用 setFooterLinkExternalUrl 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))
    ->setFooterLinkLabel(__('Visit Website'))
    ->setFooterLinkExternalUrl('https://huth.it')

设置详细链接资源

默认情况下,此包通过 Resource::$model 生成详细链接,因此您可以在不费任何力气的情况下使用多个资源来表示一个模型。

使用 setDetailLinkResource 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))
    ->setDetailLinkResource(\App\Nova\Resources\Order::class)

设置卡片宽度

使用 width 方法。

#[ExpectedValues(values: ['full', '1/3', '1/2', '1/4', '2/3', '3/4'])]

(new NovaResourceCard(\App\Nova\Resources\User::class))->width('1/2')

向卡片元素添加类

使用 addCardClasses 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))->addCardClasses(['bg-white', 'dark:bg-gray-800'])
(new NovaResourceCard(\App\Nova\Resources\User::class))->addCardClasses('bg-white dark:bg-gray-800')

向资源标题添加类

使用 addResourceHeadingClasses 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceHeadingClasses(['bg-white', 'dark:bg-gray-800'])
(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceHeadingClasses('bg-white dark:bg-gray-800')

向资源索引错误对话框添加类

使用 addResourceIndexErrorDialogClasses 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceIndexErrorDialogClasses(['my-class', 'p-2'])
(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceIndexErrorDialogClasses('my-class p-2'')

向资源索引空对话框添加类

使用 addResourceIndexEmptyDialogClasses 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceIndexEmptyDialogClasses(['my-class', 'p-2'])
(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceIndexEmptyDialogClasses('my-class p-2'')

向资源资源表添加类

使用 addResourceResourceTableClasses 方法。

(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceResourceTableClasses(['my-class', 'p-2'])
(new NovaResourceCard(\App\Nova\Resources\User::class))->addResourceResourceTableClasses('my-class p-2'')

高级用法

创建您自己的 Nova 资源,以进一步自定义它。

您应该将 $globallySearchable 设置为 false,以便此资源不包括在全局搜索中。
(见:禁用资源的全局搜索

来自 example-app-nvpRt7 的示例资源

class CardUser extends Resource
{
    /**
     * The model the resource corresponds to.
     *
     * @var string
     */
    public static string $model = \App\Models\User::class;

    /**
     * Indicates if the resource should be globally searchable.
     *
     * @var bool
     */
    public static $globallySearchable = false;

    /**
     * Get the displayable label of the resource.
     *
     * @return string
     */
    public static function label(): string
    {
        return __('Latest Users');
    }

    /**
     * The pagination per-page options configured for this resource.
     *
     * @return array
     */
    public static $perPageOptions = [5];

    /**
     * Build an "index" query for the given resource.
     *
     * @param NovaRequest $request
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public static function indexQuery(NovaRequest $request, $query): \Illuminate\Database\Eloquent\Builder
    {
        return $query->orderByDesc('created_at');
    }

    /**
     * Get the fields displayed by the resource.
     *
     * @param NovaRequest $request
     * @return array
     */
    public function fields(NovaRequest $request): array
    {
        return [
            ID::make()->sortable(),
            Text::make(__('Name'), 'name'),
        ];
    }

    /**
     * Determine if the current user can delete the given resource.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    public function authorizedToDelete(Request $request): bool
    {
        return false;
    }

    /**
     * Determine if the current user can restore the given resource.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    public function authorizedToRestore(Request $request): bool
    {
        return false;
    }

    /**
     * Determine if the current user can update the given resource.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    public function authorizedToUpdate(Request $request): bool
    {
        return false;
    }

    /**
     * Determine if the current user can force delete the given resource.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    public function authorizedToForceDelete(Request $request): bool
    {
        return false;
    }

    /**
     * Determine if the current user can replicate the given resource or throw an exception.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    public function authorizeToReplicate(Request $request): bool
    {
        return false;
    }

    // ...