jelix/jtags-module

为 Jelix 提供的模块,允许管理记录/对象上的标签

安装次数: 50

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 3

分支: 0

开放性问题: 0

类型:jelix-module

v1.1.0 2022-12-24 14:53 UTC

This package is auto-updated.

Last update: 2024-09-15 14:25:31 UTC


README

这是一个 Jelix 模块,允许管理记录/对象上的标签。

此模块适用于 Jelix 1.7.2 及更高版本。

最初是在 Booster 项目Havefnubb 项目 中开发的。

设置模块

最佳方法是使用 Composer。

在项目内部命令行中执行

composer require "jelix/jtags-module"

启动应用程序的配置器以启用模块

php dev.php module:configure jtags

配置模块后,您应启动应用程序的安装程序以激活模块

php install/installer.php

如何使用它

所有标签都存储在一个表中。另一个表包含标签、作用域和 id 之间的关联。

作用域是记录类型(例如,表名)或域。id 是作用域内记录的 id。

当您为对象存储一些标签时,您需要提供作用域和对象的 id。

例如,对于新闻帖子,作用域可能是 news,而 id 是新闻的 id。

在表单中编辑标签

在 jforms 中添加

<input ref="tags" rows="2" cols="60">
    <label>Type your tags</label>
</input>

在初始化表单时,检索标签列表并将其设置到输入中

$form = jForms::create('news', $id_news);

// ...

$srvTags = jClasses::getService("jtags~tags");
$tags = implode(',', $srvTags->getTagsBySubject('news', $id_news));
$form->setData('tags', $tags);

如果需要自动完成,在组件中添加类,并在模板中

{ctrl_control 'tags', ["class"=>"jtags-autocomplete"]}

并在控制器中调用 setResponseHeaders()

$resp = $this->getResponse('html');
//...
jClasses::getService("jtags~tags")->setResponsesHeaders($resp);

提交表单后保存标签

在提交的动作中,检索标签列表,并调用 saveTagsBySubject()

$id_news = $this->param('id_news');
$form = jForms::fill('news', $id_news);

// ...

$srvTags = jClasses::getService("jtags~tags");
$tags = explode(',', $form->getData('tags'));

$srvTags->saveTagsBySubject($tags, 'news', $id_news));

显示标签列表

要显示记录的标签列表,请调用 getTagsBySubject

$srvTags = jClasses::getService("jtags~tags");
$tags = implode(', ', $srvTags->getTagsBySubject('news', $id_news));

$tpl->assign('tags', $tags);

显示标签云

有一个区域可以显示标签云。

在控制器中

$tpl->assignZone("tagscloud", "jtags~tagscloud", array('destination'=>'module~ctrl:method', 'maxcount'=>30));

或在一个模板中

{zone "jtags~tagscloud", array('destination'=>'module~ctrl:method', 'maxcount'=>20)}
  • destination : 将显示对应标签对象的动作。它接收一个 "tag" 参数。
  • maxcount : 只显示给定数量的标签。将其设置为 0 或不设置此参数以显示所有标签。

获取所有带有标签的对象

$tag = $this->param("tag", false);
if ($tag) {
    $srv_tags = jClasses::getService("jtags~tags");
    $listOfNewsId = $srv_tags->getSubjectsByTags($tag, "news"));
}