macfly/yii2-taxonomy

通过添加术语定义(标签、属性)扩展Yii2-taxonomy-term(由mhndev提供)。该扩展通过向模型添加添加术语、属性和标签的行为来完善原始模块。

安装次数: 1,650

依赖项: 0

建议者: 0

安全性: 0

星标: 2

关注者: 2

分支: 2

类型:yii2-extension

1.2.0 2017-08-21 10:58 UTC

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