2amigos/yii2-taggable-behavior

此包已被废弃且不再维护。未建议替代包。

Yii 框架的标签行为

安装: 108,365

依赖: 6

建议者: 0

安全: 0

星标: 85

关注者: 29

分支: 27

开放问题: 1

类型:yii2-extension

1.0.2 2016-12-09 12:23 UTC

This package is not auto-updated.

Last update: 2023-07-28 01:57:48 UTC


README

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

此扩展提供标签行为函数。

安装

通过 composer 安装此扩展是首选方式。

运行以下命令:

$ composer require 2amigos/yii2-taggable-behavior:~1.0

或者将以下内容添加到你的 composer.json 文件的 require 部分:

"2amigos/yii2-taggable-behavior": "~1.0"

配置

首先需要按以下方式配置模型

use dosamigos\taggable\Taggable;

class Tour extends ActiveRecord
{
    public function behaviors() {
        return [
            [
                'class' => Taggable::className(),
            ],
        ];
    }
}

用法

首先需要创建一个 tbl_tag (你可以选择你想要的名称)表,格式如下,并构建相应的 ActiveRecord 类(例如 Tag

+-----------+
|  tbl_tag  |
+-----------+
| id        |
| frequency |
| name      |
+-----------+

接下来,如果你希望将标签链接到某个 ActiveRecord(比如 Tour),你需要创建一个将 Tour 模型与 Tag 相关联的表

+-------------------+
| tbl_tour_tag_assn |
+-------------------+
| tour_id           |
| tag_id            |
+-------------------+

然后,我们需要配置与 Tour 的关系

/**
 * @return \yii\db\ActiveQuery
 */
public function getTags()
{
    return $this->hasMany(Tag::className(), ['id' => 'tag_id'])->viaTable('tbl_tour_tag_assn', ['tour_id' => 'id']);
}

需要注意的是,如果你使用不同的名称,行为中的 $relation 属性应相应地更改。

最后,设置行为,以及与之一起工作的属性 + 规则,在我们的 Tour 类中,在这种情况下,我们将使用默认的 tagNames

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        // ...
        [['tagNames'], 'safe'],
        // ...
    ];
}

/**
 * @inheritdoc
 */
public function behaviors()
{
    return [
        // for different configurations, please see the code
        // we have created tables and relationship in order to
        // use defaults settings
        Taggable::className(),
    ];
}

就这样,我们现在可以开始使用模型中的标签了。例如,以下是在我们的表单中使用它以及我们的 Selectize Widget 的方法

// On TagController (example)
// actionList to return matched tags
public function actionList($query)
{
    $models = Tag::findAllByName($query);
    $items = [];

    foreach ($models as $model) {
        $items[] = ['name' => $model->name];
    }
    // We know we can use ContentNegotiator filter
    // this way is easier to show you here :)
    Yii::$app->response->format = Response::FORMAT_JSON;

    return $items;
}


// On our form
<?= $form->field($model, 'tagNames')->widget(SelectizeTextInput::className(), [
    // calls an action that returns a JSON object with matched
    // tags
    'loadUrl' => ['tag/list'],
    'options' => ['class' => 'form-control'],
    'clientOptions' => [
        'plugins' => ['remove_button'],
        'valueField' => 'name',
        'labelField' => 'name',
        'searchField' => ['name'],
        'create' => true,
    ],
])->hint('Use commas to separate tags') ?>

如你所见,tagNames 是属性(默认),我们可以通过它访问标签,如果将你的属性 tagNames 定义为字符串或 null,则它们将作为逗号分隔的名称存储在其中;如果你将 tagNames 定义为数组,它将填充相关标签。

一旦提交包含上述字段的表单,标签将自动保存并链接到我们的 Tour 模型。

测试

$ ./vendor/bin/phpunit

贡献

有关详细信息,请参阅 CONTRIBUTING

致谢

许可

BSD 许可证(BSD)。请参阅 许可文件 获取更多信息。

687474703a2f2f7777772e67726176617461722e636f6d2f6176617461722f35353336333339346437323934356666376564333132353536656330343165302e706e67
网络开发从未如此有趣
www.2amigos.us