jelix / jtags-module
为 Jelix 提供的模块,允许管理记录/对象上的标签
v1.1.0
2022-12-24 14:53 UTC
Requires
- php: >=7.4
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")); }