asgardcms / tag-module
AsgardCMS中的标签管理
dev-master / 1.0.x-dev
2016-09-08 17:18 UTC
Requires
- php: >=5.6
- asgardcms/core-module: ~2.0
- composer/installers: ~1.0
Requires (Dev)
- asgardcms/page-module: ~2.0
- friendsofphp/php-cs-fixer: ^1.11
- orchestra/testbench: 3.3.*
- phpro/grumphp: ^0.9.1
- phpunit/phpunit: ~4.0
This package is auto-updated.
Last update: 2024-09-08 07:15:21 UTC
README
一个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();