palauaandsons/nova-tags-field

为 Nova 应用程序提供标签字段的软件包,使用 cartalyst/tags

4.0.1 2023-03-31 09:32 UTC

This package is auto-updated.

Last update: 2024-08-30 01:43:46 UTC


README

此软件包包含一个 Nova 字段,用于向资源添加标签。底层使用 cartalyst/tags 软件包。

此软件包基于 spatie/nova-tags-field。所有功劳归功于 Spatie 团队。

安装

首先,您必须将 cartalyst/tags 安装到您的 Laravel 应用程序中。有关该软件包的安装说明,请参阅 此处

接下来,您可以通过 composer 在使用 Nova 的 Laravel 应用程序中安装此软件包。

composer require palauaandsons/nova-tags-field

用法

要使 Eloquent 模型可标记,请添加 \Cartalyst\Tags\TaggableTrait 特性和实现 \Cartalyst\Tags\TaggableInterface 接口。

use Cartalyst\Tags\TaggableTrait;
use Cartalyst\Tags\TaggableInterface;
use Illuminate\Database\Eloquent\Model;

class BlogPost extends Model implements TaggableInterface
{
    use TaggableTrait;
    
    ...
}

接下来,您可以在 Nova 资源中使用 PalauaAndSons\TagsField\Tags 字段。

namespace App\Nova;

use PalauaAndSons\TagsField\Tags;

class BlogPost extends Resource
{
    // ...
    
    public function fields(Request $request)
    {
        return [
            // ...
            
            Tags::make('Tags'),

            // ...
        ];
    }
}

现在您可以在 Nova 应用程序中的博客文章屏幕上查看和添加标签。

限制建议

默认情况下,标签字段在输入时会显示最多 5 个建议。如果您不想显示任何建议,请在 withoutSuggestions() 上标记。

Tags::make('Tags')->withoutSuggestions(),

您可以使用 limitSuggestions() 修改建议的数量。

Tags::make('Tags')->limitSuggestions($maxNumberOfSuggestions),

仅允许一个标签

如果用户只能为您的资源选择一个标签,您可以使用 single 方法。

// in your Nova resource

public function fields(Request $request)
{
    return [
        // ...
        
        Tags::make('Tags')->single(),

        // ...
    ];
}

该字段将以选择表单元素的形式呈现。它将由已保存的标签名称填充。

处理标签

有关如何处理已保存的标签的更多信息,请参阅 cartalyst/tags 的文档

在 Nova 中管理标签

如果您想在保存的标签上执行 CRUD 操作,只需为它创建一个 Nova 资源即可。以下是一个示例。

namespace App\Nova;

use Illuminate\Http\Request;
use Laravel\Nova\Fields\Text;
use Cartalyst\Tags\IlluminateTag as TagModel;

class Tag extends Resource
{
    public static $model = TagModel::class;

    public static $title = 'name';

    public static $search = [
        'name',
    ];

    public function fields(Request $request)
    {
        return [
            Text::make('Namespace')->sortable()->hideWhenUpdating(),
            Text::make('Name')->sortable(),
            Text::make('Slug')->sortable(),
        ];
    }
}

测试

phpunit

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件 isern@palauaandsons.com 而不是使用问题跟踪器。

鸣谢

渲染标签的 Vue 组件基于由 Adam Wathan 创建的标签 Vue 组件,如在他的出色课程 Advanced Vue Component Design 中所示。

许可

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件