macfly / yii2-taxonomy
通过添加术语定义(标签、属性)扩展Yii2-taxonomy-term(由mhndev提供)。该扩展通过向模型添加添加术语、属性和标签的行为来完善原始模块。
1.2.0
2017-08-21 10:58 UTC
Requires
This package is auto-updated.
Last update: 2024-09-23 13:22:33 UTC
README
Yii2 Taxonomy管理。一个组件,可以为您的应用程序添加通用分类功能。该组件包含一些术语定义(标签、属性)。这些定义可以通过添加所选行为在任何模型上启用。此扩展依赖于yii2-taxonomy-term(由mhndev提供)。
安装
安装此扩展的首选方法是通过composer。
运行以下命令:
php composer.phar require --prefer-dist macfly/yii2-taxonomy "*"
或者将以下内容添加到您的composer.json文件的require部分:
"macfly/yii2-taxonomy": "*"
迁移
php yii migrate --migrationPath=@vendor/mhndev/yii2-taxonomy-term/src/migrations
使用方法
配置在Web界面中管理分类和术语
按照以下方式配置config/web.php
'modules' => [ ................ 'taxonomy' => [ 'class' => 'macfly\taxonomy\Module' ], ................ ],
- 漂亮的URL /taxonomy
- 不使用漂亮的URL index.php?r=taxonomy
配置使用术语
按照以下方式配置模型
use macfly\taxonomy\behaviors\BaseTermBehavior; /** * ... * @property array $terms */ class Post extends \yii\db\ActiveRecord { public function behaviors() { return [ BaseTermBehavior::className(), ... ], ]; } }
获取实体的术语
$post = Post::findOne(['id'=>1]); $post->terms;
设置实体的术语(将删除所有其他术语)
$post = Post::findOne(['id'=>1]); $terms = [ Term::findOne(1), Term::findOne(12), ]; $post->terms = $terms;
从实体中分离术语
$term = Term::findOne(['id'=>1]); $post = Post::findOne(['id'=>1]); $post->delTerm($term);
检查实体的术语是否存在
$term = Term::findOne(['id'=>1]); $post = Post::findOne(['id'=>1]); $post->hasTerm($term);
将术语添加到实体中(将保留其他术语)
$term = Term::findOne(['id'=>1]); $post = Post::findOne(['id'=>1]); $post->addTerm($term);
配置使用属性和术语
属性是定义为“类型”的分类,并且具有名称和值。您可以向项目添加多个属性。一个属性可以具有多个“名称”和值。
按照以下方式配置模型
use macfly\taxonomy\behaviors\PropertyTermBehavior; /** * ... * @property array $terms * @property array $envs */ class Post extends \yii\db\ActiveRecord { public function behaviors() { return [ PropertyTermBehavior::className(), ... ], ]; } # Define the get method of property 'env' public function getEnvs() { return $this->getPropertyTerms('env'); } # Define the set method of property 'env' public function setEnvs($terms) { return $this->setPropertyTerms('env', $terms); } # Add term by name and value public function addEnv($name, $value) { return $this->addPropertyTerm('env', $name, $value); } # Detach term by name and value public function delEnv($name, $value) { return $this->delPropertyTerm('env', $name, $value); } # Has term by name and value public function hasEnv($name, $value) { return $this->hasPropertyTerm('env', $name, $value); } }
获取实体的属性“env”的术语
$post = Post::findOne(['id'=>1]); $post->envs;
设置实体的属性“env”的术语(将删除属性“env”的所有其他术语)
$post = Post::findOne(['id'=>1]); $terms = [ Term::findOne(1), Term::findOne(12), ]; $post->envs = $terms;
通过名称和值从实体中分离属性“env”(如果您想通过术语分离它,只需使用delTerm($term)即可)
$post = Post::findOne(['id'=>1]); $post->delEnv('PWD', '/home/test/');
通过名称和值检查实体上是否存在属性“env”(如果您想通过术语检查它,只需使用hasTerm($term)即可)
$post = Post::findOne(['id'=>1]); $post->hasEnv('PWD', '/home/test');
通过名称和值将属性“env”添加到实体中(将保留其他术语,如果您想通过术语添加它,只需使用addTerm($term)即可)
$post = Post::findOne(['id'=>1]); $post->addEnv('PWD', '/home/test');
配置使用标签、属性和术语
基本而言,标签代表类型为“标签”且名称为“名称”的属性。您可以向项目添加多个标签。
按照以下方式配置模型
use macfly\taxonomy\behaviors\TagTermBehavior; /** * ... * @property array $terms * @property array $tags */ class Post extends \yii\db\ActiveRecord { public function behaviors() { return [ TagTermBehavior::className(), ... ], ]; } }
您可以使用以下方式为特定模型更改“标签”分类类型和名称:
use macfly\taxonomy\behaviors\TagTermBehavior; /** * ... * @property array $terms * @property array $tags */ class Post extends \yii\db\ActiveRecord { public function behaviors() { return [ 'tag' => [ 'class' => TagBehavior::className(), 'type' => 'myposttagtype', 'name' => 'myposttagname', ], ]; } }
获取实体的标签
$post = Post::findOne(['id'=>1]); $post->tags;
设置实体的标签(将删除所有其他术语)
$post = Post::findOne(['id'=>1]); $post->tags = ['tags1', 'tag2', 'test']; // Or $post->tags = 'tags1,tag2,test';
从实体中分离标签
$post = Post::findOne(['id'=>1]); $post->delTag('tags1');
检查实体上是否存在标签
$post = Post::findOne(['id'=>1]); $post->hasTag('test');
将标签添加到实体中(将保留其他标签)
$post = Post::findOne(['id'=>1]); $post->addTag('foo');
配置清除未使用的术语
基本而言,未使用的术语将在一段时间内(默认为30天)被删除,这有助于删除无用的标签。
按照以下方式配置控制台操作的路由 config/console.php
'modules' => [ ................ 'taxonomy' => [ 'class' => 'macfly\taxonomy\Module' ], ................ ],
如果updated_at晚于一个月,则默认术语将被删除。如果您想定义特定的周期时间,请在命令行中指定它
您还可以添加一个cron作业(http://www.crontab-generator.org/),在每周日00:00运行,使用一些控制器操作,如下所示
在Linux上:
0 0 * * 0 /path/to/yii/application/yii taxonomy/term/clear 50 >> /var/log/console-app.log 2>&1
在Window任务计划程序上:
/path/to/yii/application/yii taxonomy/term/clear