sjaakp/yii2-taggable

管理Yii2中ActiveRecord的标签。

安装次数: 22 419

依赖项: 0

建议者: 0

安全: 0

星标: 29

关注者: 5

分支: 17

开放问题: 7

类型:yii2-extension

2.0.2 2019-12-22 21:22 UTC

This package is auto-updated.

Last update: 2024-09-23 07:29:35 UTC


README

管理PHP框架Yii 2.0中ActiveRecords的标签

Latest Stable Version Total Downloads License

本包包含五个类,用于处理ActiveRecords的标签化,标签可以与或从模型(ActiveRecord)关联,并可排序。标签通过Pixabay开发的优秀jQuery tagEditor进行操作。

yii2-taggable 的四个主要类如下

  • TagBehavior - 使ActiveRecord表现得像标签;
  • TaggableBehavior - 为ActiveRecord添加标签处理;
  • TagEditor - 用于操作标签的部件;
  • TagSuggestAction - 为TagEditor的自动完成功能提供数据。

还有一个名为 TagEditorAsset 的类,它是TagEditor的辅助类。

yii2-taggable 套件的一个演示 在这里

请注意,版本2的API与版本1略有不同。

安装

安装 yii2-taggable 的首选方法是使用 Composer。您可以将以下内容添加到 composer.json 文件的 require 部分

"sjaakp/yii2-taggable": "*"

或者运行

composer require sjaakp/yii2-taggable "*"

您可以通过 下载ZIP格式的源代码 来手动安装 yii2-taggable

设置

假设我们有一个可以标记的类(ActiveRecord)Article,它是一个文章类,还有一个类 Tag 用于存储标签。

标签至少有以下属性

  • id: 主键;
  • name: 存储实际的标签关键词;

连接表

ArticleTag 通过一个连接表以多对多关系相连。让我们称这个表为 article_tag。它有以下字段

  • model_id: 存储一个 Article 的主键值;
  • tag_id: 存储一个 Tag 的主键值;
  • ord: 存储一个 Tag 的排序顺序。

连接表不需要有主键。在 model_idtag_id 上设置索引是个好主意。

TaggableBehavior

Article可标记的,应该这样设置

<?php

namespace app\models;

use sjaakp\taggable\TaggableBehavior;

class Article extends ActiveRecord    {

	public function behaviors()
	{
        return [
            'taggable' => [
                'class' => TaggableBehavior::class,
                'junctionTable' => 'article_tag',
                'tagClass' => Tag::class,
            ]
        ];
    }
	// ...
}

TagBehavior

Tag 表现得像 标签,看起来像这样

<?php

namespace app\models;

use sjaakp\taggable\TagBehavior;

class Tag extends ActiveRecord    {

	public function behaviors()
	{
        return [
            'tag' => [
                'class' => TagBehavior::class,
                'junctionTable' => 'article_tag',
                'modelClass' => Article::class,
            ]
        ];
    }

	// ...
}

附加 TagBehavior 后,类 Tag 增加了一些新的属性和方法。可以通过以下方式获得标签视图的链接

$link = $tag->link;

models 获取所有被 $tag 标记的文章

$taggedArticles = $tag->models;

如果您想使用 ActiveDataProvider 来访问它们,请使用

$providerOfTaggedArticles = $tag->getModels();

标记文章的数量

$countTaggedArticles = $tag->modelCount;         

文章视图

Article 视图中,我们现在可以这样显示标签

<?php
	// ...
/**
 * @var yii\web\View $this
 * @var ap\models\Article $model
 */
?>

<!-- Display article title and body here. -->

<h4>Tags</h4>
<p><?= $model->tagLinks ?></p>

tagLinks 是一个新虚拟属性,由 TaggableBehavior 添加到 Article

可以通过以下方式检索所有 Tag

$allTags = $article->tagModels;

要获取一个 ActiveQuery,例如用于一个 ActiveDataProvider,请使用以下方法:

$provider = new ActiveDataProvider([
    'query' => $article->getTagModels()
]);

如果您想知道一个 Article 是否有一个具有特定名称的 Tag,比如 'politics',您可以这样查询类:

if ($article->hasTag('politics'))   {
    // ...
}

文章更新

为了让创建和更新 Tag 更加容易,我们还需要设置 TagController

<?php

namespace app\controllers;

use yii\web\Controller;
use app\models\Tag;
use sjaakp\taggable\TagSuggestAction;

class TagController extends Controller	{

    public function actions()    {
        return [
            'suggest' => [
                'class' => TagSuggestAction::class,
                'tagClass' => Tag::class,
            ],
        ];
    }

	// ...
}

标签编辑器

Article 的更新和创建视图中,我们现在可以使用 TagEditor 小部件。将以下内容添加到 views\article\_form.php

<?php

use yii\helpers\Url;
use sjaakp\taggable\TagEditor;

/**
 * @var yii\web\View $this
 * @var app\models\Article $model
 * @var yii\widgets\ActiveForm $form
 */
?>
	...

    <?= $form->field($model, 'tags')->widget(TagEditor::class, [
        'clientOptions' => [
            'autocomplete' => [
                'source' => Url::toRoute(['tag/suggest'])
            ],
        ]
    ]) ?>
	...

tagsArticle 的新虚拟属性,由 TaggableBehavior 添加。'tag/suggest' 是指向 TagController 中之前定义的 suggest 动作的路线的基础。从 Pixabay 了解更多关于 clientOptions 的信息。

修改

yii2-taggable 的基本设置可以通过多种方式进行修改。请参阅源文件以了解其他可用选项。以下是一些选项:

  • nameAttribute:标签类的名称属性。在 TagBehavior、TaggableBehavior 和 TagSuggestAction 中定义。默认:'name'
  • tagKeyColumnmodelKeyColumn:连接表的外键字段。在 TagBehavior 和 TaggableBehavior 中定义。默认分别为:'tag_id''model_id'
  • orderColumn:在连接表中保存排序信息。在 TaggableBehavior 中定义。
  • renderLink:可调用的,function($tag, $options),返回单个标签链接的 HTML 代码。由 TagBehavior 定义。如果没有设置(默认),TagBehaviour 将标签链接渲染为简单的 HTML a。