saber13812002/nova-tags-field

Nova 应用程序的标签字段

4.0.801.2 2024-06-02 20:26 UTC

This package is auto-updated.

Last update: 2024-10-02 21:23:50 UTC


README

Nova 应用程序的标签字段

Latest Version on Packagist GitHub Workflow Status Total Downloads

此包包含一个 Nova 字段,用于向资源添加标签。在底层它使用 spatie/laravel-tags 包。

支持我们

我们投入了大量资源来创建 最佳开源包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感谢您从家乡给我们寄来明信片,注明您正在使用我们哪些包。您可以在 我们的联系页面 找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙上

要求

此 Nova 字段需要 MySQL 5.7.8 或更高版本。

安装

首先,您必须在您的 Laravel 应用程序中安装 spatie/laravel-tags。以下是该包的 安装说明

接下来,您可以通过 composer 将此包安装到使用 Nova 的 Laravel 应用程序中

composer require spatie/nova-tags-field

用法

要使 Eloquent 模型可标记,只需将其添加到 \Spatie\Tags\HasTags 特性中

class BlogPost extends \Illuminate\Database\Eloquent\Model
{
    use \Spatie\Tags\HasTags;
    
    ...
}

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

namespace App\Nova;

use Spatie\TagsField\Tags;

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

            // ...
        ];
    }
}

现在您可以在 Nova 应用程序中的博客文章屏幕上查看和添加标签。所有标签都将保存到 tags 表中。

限制建议

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

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

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

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

限制标签

默认情况下,标签字段将允许您添加无限个标签。您可以使用 limit() 限制标签。

Tags::make('Tags')->limit($maxNumberOfTags),

使用类型

底层标签包支持 标签类型。要使您的标签字段保存特定类型的标签,只需在将字段添加到 Nova 资源时附加类型名称。

// in your Nova resource

public function fields(NovaRequest $request)
{
    return [
        // ...
        
        Tags::make('Tags')->type('my-special-type'),

        // ...
    ];
}

只允许一个标签

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

// in your Nova resource

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

        // ...
    ];
}

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

如果您想能够取消选中一个标签,您可以使用 canBeDeselected 方法。

// in your Nova resource

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

        // ...
    ];
}

使用不同的占位符

您可以使用 此处记录的 withMeta 方法来更改占位符,默认占位符为 __('Add tags...')

// in your Nova resource

public function fields(NovaRequest $request)
{
    return [
        // ...
        
        Tags::make('Categories', 'tags')->withMeta(['placeholder' => 'Add categories...']),

        // ...
    ];
}

处理标签

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

在 Nova 中管理标签

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

namespace App\Nova;

use Laravel\Nova\Fields\Text;
use Laravel\Nova\Http\Requests\NovaRequest;
use Spatie\Tags\Tag as TagModel;

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

    public static $title = 'name';

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

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

显示带 Nova 资源链接的标签

在创建字段时,您可以使用 withLinkToTagResource 方法。
示例

Tags::make('Tags')->withLinkToTagResource() // The resource App\Nova\Tag will be used
Tags::make('Tags')->withLinkToTagResource(\Custom\CustomTag::class) // The resource \Custom\CustomTag will be used

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全

如果您发现与安全相关的错误,请通过 security@spatie.be 发送邮件,而不是使用问题跟踪器。

致谢

渲染标签的 Vue 组件基于 Adam Wathan 创建的标签 Vue 组件,如他在 优秀的 Vue 组件设计高级课程 中所示。

许可证

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