asgardcms/tag-module

AsgardCMS中的标签管理

安装: 704

依赖: 0

建议者: 0

安全性: 0

星标: 1

关注者: 4

分支: 5

开放问题: 1

类型:asgard-module

dev-master / 1.0.x-dev 2016-09-08 17:18 UTC

This package is auto-updated.

Last update: 2024-09-08 07:15:21 UTC


README

Latest Version Software License Build Status Scrutinizer Coverage Quality block SensioLabs Insight

Slack

一个AsgardCMS模块,可以轻松地为任何实体添加标签。

安装

Composer

composer require asgardcms/tag-module

迁移

运行标签模块的迁移

php artisan module:migrate tag

权限

前往管理员角色,为自己分配标签模块的权限。

用法

任何实体都可以附加标签。要启用此功能,您的实体需要实现一个接口,使用一个特质,这样就完成了。

1. 在所需的实体上添加接口 & 特质

您的实体需要实现Modules\Tag\Contracts\TaggableInterface接口。

为了使您的实体满足此接口,它需要使用以下特质

  • Modules\Core\Traits\NamespacedEntity
  • Modules\Tag\Traits\TaggableTrait

标签按命名空间组织。这用于在显示字段时获取特定命名空间的标签。如果需要创建标签,它也会为该命名空间创建标签。

默认情况下,TaggableTrait将使用实体完整的命名空间。然而,您可以通过在实体上使用静态$entityNamespace属性来指定一个更友好/更短的命名空间。

示例

protected static $entityNamespace = 'asgardcms/media';

2. 定义用于标签的新命名空间

在您的模块Service Provider中,boot()方法,您现在需要添加它将要使用的命名空间。这可以通过使用TagManager接口来完成。

$this->app[TagManager::class]->registerNamespace(new File());

有了这个,标签模块就知道了新的命名空间。

3. 在您的视图中显示标签字段

通过使用自定义blade指令,您可以在视图中包含标签字段。

  • 第一个参数是要获取标签的命名空间。
  • (可选)第二个参数是要获取标签的实体(如果给定实体存在标签,则预先填充输入)。
  • (可选)第三个和最后一个参数可以是视图。这将使用其输入字段覆盖默认的标签视图。
@tags('asgardcms/media', $file)

4. 存储标签

在您的存储库中,您需要调用setTags()方法以持久化实体的标签。

$file->setTags(array_get($data, 'tags'));

关于如何为实体使用标签的全部内容。

便利方法

作用域: withTag()

获取具有给定标签之一的所有实体。可选地指定执行搜索操作的列,默认为slug列。

在您的存储库中的示例

// Get all files with either of the 2 tags
$files = $this->file->withTag(['your-first-tag', 'some-other-tag'])->get();

作用域: whereTag()

获取具有给定标签的所有实体。可选地指定执行搜索操作的列,默认为slug列。

在您的存储库中的示例

// Get all files with all given tags
$files = $this->file->whereTag(['your-first-tag', 'some-other-tag'])->get();

// Get all files with the given tag
$files = $this->file->whereTag('your-first-tag')->get();

allTags():获取实体的所有标签

您可以通过使用allTags()方法获取实体的所有标签。

$tags = $file->allTags();