2amigos / yii2-taggable-behavior
此包已被废弃且不再维护。未建议替代包。
Yii 框架的标签行为
1.0.2
2016-12-09 12:23 UTC
Requires
- yiisoft/yii2: ^2.0
Requires (Dev)
- phpunit/dbunit: ~1.0
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2023-07-28 01:57:48 UTC
README
此扩展提供标签行为函数。
安装
通过 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)。请参阅 许可文件 获取更多信息。
网络开发从未如此有趣
www.2amigos.us