跳转到主要内容

在Plone中创建、编辑和使用分层分类法!

项目描述

分类法词汇表

CI

Plone 中创建、编辑和使用分层分类法。

此插件支持多语言分层分类法,使用户能够轻松地将现有内容与一个或多个分类法中的术语关联起来。

分类法 是“基于共同特征定义组 [...] 并给这些组命名。每个组都赋予一个等级,同一等级的组可以聚合形成一个等级更高的超级组,从而创建一个层次分类”。

以下是一个“生物分类法王国”的例子

Living Organisms
Living Organisms -> Eukaryotic
Living Organisms -> Eukaryotic -> Simple multicells or unicells
Living Organisms -> Eukaryotic -> Multicellular
Living Organisms -> Eukaryotic -> Multicellular -> Autotrophic
Living Organisms -> Eukaryotic -> Multicellular -> ...
Living Organisms -> Prokaryotic
Living Organisms -> Prokaryotic -> Archaebacteria
Living Organisms -> Prokaryotic -> Eubacteria
Living Organisms -> Prokaryotic -> Eubacteria -> ...

分类法可以相当大,有时达到数万个(10,000+)。在多语言网站上,每个标题 – 或 字幕 – 都必须翻译。

注意,在层次结构中选择一个术语意味着选择其所有父术语。在上面的例子中,这意味着如果选择了“古菌”,那么“原核生物”和“生物体”也将被选中。

概述

实现尝试满足以下要求

  1. 支持许多(10,000+)术语。

  2. 术语可以组织在层次分类中。

  3. 轻松导入和导出通用格式(VDEX)。

  4. 分类法将提供可翻译的词汇表。

  5. 使用行为为每个分类法提供一个选择字段。

  6. 通过“通过网络”管理分类法并将它们分配给内容类型。

以下描述中,我们将涉及这些要求中的每一个。

数据结构

为了限制内存和计算需求,术语数据包含在每个语言中恰好一个持久索引,从 材料化术语路径 到其 术语标识符 的映射。

术语

Living Organisms -> Eukaryotic -> Simple multicells or unicells

将按此路径索引

"Living Organisms/Eukaryotic/Simple multicells or unicells"

该索引使我们能够提供排序词汇术语的迭代器,几乎不需要成本(以及包含查询)。

同时,尽管层次结构被编码,我们仍然可以快速查找子树中的术语。

注意:由于 collective.taxonomy 使用斜杠作为分隔符,如果您想在术语中使用“/”,则必须修补 PATH_SEPARATOR 常量。

数据交换

虽然 collective.taxonomy(此包)确实可以通过基于浏览器的界面创建、管理和编辑分类法,但主要重点是支持 VDEX 格式的术语交换

IMS Vocabulary Definition Exchange(VDEX)规范定义了各种类值列表交换的语法:通常表示为“词汇表”的集合。

此交换与 GenericSetup 集成,后者使用设置配置文件管理导入和导出。也可以使用控制面板导入和导出 VDEX 文件。

该软件包包含对 Dexterity 内容类型框架的集成:对于每个分类法,都提供了一个 行为,该行为添加了一个选择字段,其词汇表来自分类法。该行为可以通过字段名称、标题以及是否允许选择一个或多个多个术语进行配置。您应该 首先 安装 dexterity,然后安装 collective.taxonomy,否则现有分类法的行为将丢失。

它是如何工作的?

在此项目期间的主要目标是通过Web实现高效率的管理。因此,使用该产品不需要任何Python编程或 configure.zcml 指令。

在控制面板(/@@taxonomy-settings)中,用户可以

  1. 从VDEX文件导入分类法。

  2. 将现有的分类法导出到VDEX文件。

  3. 删除分类法

  4. 为分类法添加和删除行为

为分类法创建新的行为后,可以轻松地使用Dexterity提供的内容类型控制面板将其添加到所需的内容类型。完成后,分类法在添加和编辑表单中可用,如果网站上使用 plone.app.collection,它也适用于集合。还会创建索引,因此分类法可以轻松用于目录查询。

请阅读详细的 入门教程

React/Redux应用程序用于编辑分类法

允许用户编辑分类法数据的视图 @@taxonomy-edit-data 是一个React/Redux应用程序(源代码在 javascripts 目录中)。

以下是此视图的预览

Edit taxonomy data preview

允许用于分类法的语言是 portal_languages 中定义的语言。

开发

运行应用程序,在 javascripts 目录中运行 npm start。为了使Plone使用开发代码,需要将 NODE_ENV 环境变量设置为 development

NODE_ENV=development bin/instance fg

国际化

该应用程序使用 react-intl 来处理国际化。要翻译应用程序,在翻译目录中添加新的语言。例如,在翻译目录中创建一个 es 文件,其中包含

const es = {
    submitLabel: 'Enviar',
}

export default es

然后,编辑 translations/index.js 以将语言添加到翻译对象

import es from './es'

const translations = {
    es,
    fr
}

您将需要重新构建js包: npm run build

就这样!

Restapi支持

此软件包还支持基本CRUD操作的端点,这些端点可以被任何前端服务使用。

API消费者可以创建、读取和删除分类法。

动词

URL

动作

POST

/@taxonomy

使用特定数据添加分类法

GET

/@taxonomy

列出所有分类法

GET

/@taxonomy/{name}

获取分类法数据

DELETE

/@taxonomy/{name}

删除一个或多个分类法

PATCH

/@taxonomy/{name}

更新分类法数据

GET

/@taxonomySchema

获取当前分类法模式

翻译

此产品已翻译成

  • 丹麦语。

  • 德语。

  • 法语。

  • 西班牙语。

您可以为缺失的消息或新语言做出贡献,加入我们 Plone Collective Team,在 Transifex.net 服务中与全球Plone翻译者社区一起。

Plone版本兼容性

collective.taxonomy版本 3.x

  • Plone 6.0 (py3)

collective.taxonomy版本 2.x

  • Plone 5.2 (py2/py3)

  • Plone 5.1

  • Plone 5.0

集体分类版本 1.x

常见问题

如何导入现有的ATVocabularyManager词汇表?

使用此gist中提供的脚本。只需记住要编辑vocabIdentifier和vocabName。

贡献

有想法吗?发现了错误?请通过提交工单告诉我们。

贡献者

作者

贡献者

现有工作

2010年,Rok Garbas <rok@garbas.si>重新实现了Seantis之前的工作并扩展了功能,并发布了collective.vdexvocabulary。此包允许您从VDEX规范配置和填充词汇组件。该包仅支持平面词汇表,并且对多语言的支持采用不同的方法(词汇表以已翻译的形式返回)。请注意,词汇表以只读模式加载,尽管有人提议通过Web编辑词汇表。

2005年,Jens Klein <jens.klein@bluedynamics.com>发布了ATVocabularyManager。此包使您能够通过Plone的内容管理界面创建分类,其中术语作为常规网站内容存在。它与Archetypes内容类型框架(现已弃用)集成。

许可证

该项目受GPL v2或更高版本(GPLv2+)许可。

变更

3.1.2 (2024-07-21)

  • 修复关键词比较 [mamico]

  • 添加意大利语翻译 [mamico]

3.1.1 (2024-05-22)

  • 修复plone_displayviews菜单缺少plone.app.contentmenu zcml依赖项 [laulaz]

  • 更新JS依赖项。 [petschki]

  • 使用plone/meta进行配置。 [petschki]

3.1 (2023-05-26)

  • 将分类集成到集合表格视图中,现在已解析显示值 [MrTango]

  • 支持restapi端点 [cekk, nileshgulia1]

3.0.1 (2023-02-02)

  • TaxonomyIndexerWrapper中更一致地检查字段是否存在。 [mamico]

  • 导出/导入字段前缀值。 [eikichi18]

3.0.0 (2022-12-13)

  • 修复在TaxonomyIndexerWrapper中已弃用的collections.Iterable。这已被删除,因为python 3.10。现在导入collections.abc.Iterable。 [petschki]

  • 为IQueryField添加缺少的fetch_vocabulary记录。这是在plone.app.querystring 1.5.0中引入的 [laulaz]

  • 对Bootstrap 5进行更多标记更新。 [petschki]

3.0.0a1 (2022-07-13)

  • 修复Plone 6的configlet图标 (#135) [laulaz]

  • 更新edittaxonomydata.js中的标记以符合Bootstrap 5 [petschki]

2.2.2 (2022-07-12)

  • 使用新的“管理分类法”权限进行分类法配置(#134)默认分配给经理和网站管理员角色。[laulaz]

  • 修复“必需”和“单选”选项强制性的问题 [JeffersonBledsoe] (#131)

2.2.1 (2022-03-30)

  • 修复使用 Gunicorn WSGI 时分类法数据编辑的问题(#123)[laulaz]

  • 实现了更改 IDs 的可能性。[Petchesi-Iulian] (#113)

  • 添加约束以禁止重复 IDs。[Petchesi-Iulian] (#113)

  • 改进了编辑界面。[Petchesi-Iulian] (#113)

  • 更新了文档和教程。[Petchesi-Iulian] (#113)

2.2.0 (2021-12-13)

  • 重构同步装饰器的导入 [1letter] (#120)

2.1.1 (2021-11-23)

  • 在索引时将字符串包装在列表中,以正确索引单选分类法。[adrianschulz] (#108)

  • Plone 6 / pip 安装准备就绪 [avoinea] (#114)

2.1.0 (2021-05-27)

  • 修复 python2 中 GenericSetup 导出的问题 [gotcha]

  • 将分类法集成到 collective.collectionfilter [MrTango]

2.0.1 (2020-07-04)

  • 添加教程 [rodfersou]

  • 添加 Cypress 测试 [rodfersou]

  • 修复当门户语言未在分类法中找到时翻译 msgid 的问题 [petschki, rodfersou]

  • 修复 input_widget.pt 中的 JavaScript,其中包含 python 注释 [petschki]

  • 将 Transifex.net 服务集成到管理翻译过程 [macagua]

  • 添加西班牙语翻译 [macagua]

  • 更新了 i18n 支持 [macagua]

  • 添加了包的许可文档 [macagua]

2.0.0 (2019-11-25)

  • 添加卸载处理程序以清理持久性实用工具和生成的行为 [petschki]

  • 修复 python3 中 GenericSetup 导入/导出的问题 [erral]

  • 如果当前语言不可用,则使用分类法默认语言进行索引 [agitator]

  • 使生成的行为语言独立 [agitator]

  • 将选定的分类法作为带 XML 文件的压缩文件夹导出 [petschki]

  • Python 3 兼容性 [petschki, agitator]

1.5.1 (2018-10-25)

  • 修复缓存键生成器中的错误 [petschki]

1.5.0 (2018-10-18)

  • 修复控制面板以显示设置导航 [petschki]

  • 缓存词汇查找 [tomgross, petschki]

  • 修复首次编辑分类法数据时的 #53 问题 [petschki]

  • 更新德语翻译 [petschki]

  • 添加卸载配置文件 [petschki]

  • 在使用导入时的“删除”选项时,清除任何以前的排序。[malthe]

  • 添加指定行为字段前缀的支持。[malthe]

  • getTermByToken 方法现在接受一个可选参数 tail_only,如果设置,则返回一个标题翻译为最后路径段(“尾部”节点)的消息对象。[malthe]

  • 在分类法词汇类中添加了新的 makeTree 方法,它返回一个术语树。[malthe]

  • 支持术语标题中的“斜杠”字符(问题 #34)。[malthe]

  • 现在在上传分类法时,有一个选项可以在处理之前清除现有条目。[malthe]

  • 分类法现在被分配了一个持久顺序。从 VDEX 导入的分类法现在保留输入文档的排序顺序。[malthe]

  • 在分类法词汇类中添加了新的 iterEntries 方法,它提供了一个安全的方式遍历路径到标识符映射(按顺序)。[malthe]

  • 词汇是一个 IVocabularyTokenized 实现。[cedricmessiant]

  • updateBehavior 方法现在可以修改其他属性(而不仅仅是 field_title)。[cedricmessiant]

  • 添加对 plone.api >= 1.5 的显式依赖,其中 api.portal.get_current_language api 被引入。[vincentfretin]

  • 添加德语翻译 [tomgross]

  • 提及 Plone 5.0 和 5.1 兼容性 [tkimnguyen]

  • 启用选择用于行为字段的字段集。回退到分类,保持向后兼容。[sunew]

  • 更改安装时不再注册示例 Test-分类法 [datakurre]

  • 修复分类法索引器适配器在分类法删除时未正确从持久性本地注册表中注销的问题 [datakurre]

  • 修复公共 ++taxonomy++short_name -traverser 对于返回给定分类法的 (键,标签) 元组的生成器已损坏的问题 [datakurre]

1.4.4 (2016-11-29)

  • 修复自1.4.0版本以来损坏的分类导出功能。[vincentfretin]

1.4.3 (2016-11-29)

  • 修复保存操作以在Plone 5上工作(通过从body[data-portal-url]读取门户URL并为POST请求添加X-CSRF-TOKEN [datakurre]

  • 修复Plone 5.0.6中的BehaviorRegistrationNotFound错误。[tomgross]

  • 使用lxml代替elementtree。[tomgross]

  • 将fontello字体重命名为taxonomy,以避免与Plone 5主题冲突。[vincentfretin]

1.4.2 (2016-11-08)

  • 修复编辑分类数据中的保存操作。这是1.4.0版本中的回归,get参数应该是taxonomy,而不是form.widgets.taxonomy。[cedricmessiant]

1.4.1 (2016-11-03)

  • 移除在控制面板中引入的1.4.0版本中的“保存”和“取消”按钮。[vincentfretin]

  • 添加缺少的升级步骤以在注册表中创建记录。[vincentfretin]

1.4.0 (2016-11-03)

  • 通过acquisition获取语言,实际上一些Dexterity内容没有语言或空语言。[bsuttor]

  • 修复空的context.REQUEST.get('form.widgets.taxonomy')。它在POST表单中添加它。[bsuttor]

  • Plone 5兼容性。[tomgross]

  • 使用上下文语言查找索引。[bsuttor]

1.3.0 (2016-07-07)

  • 修复将分类作为字段添加时的索引。[bsuttor]

  • 现在使用React/Redux应用程序来编辑分类数据。现在可以多语言编辑数据,并比较不同语言之间的数据。[cedricmessiant]

  • 修复将分类作为字段添加时的索引。[bsuttor]

  • 现在使用React/Redux应用程序来编辑分类数据。现在可以多语言编辑数据,并比较不同语言之间的数据。[cedricmessiant]

  • 添加PATH_SEPARATOR常量,以便能够在术语中使用'/'字符。[cedricmessiant]

  • 添加++taxonomy++[shortname] -traverser,以便与PloneFormGen动态字段词汇覆盖一起使用。[datakurre]

  • 如果您的配置文件中定义了vdex xml文件,则重新安装时防止分类重置。[petschki]

  • Plone 5兼容性。[tomgross]

1.2.3 (2014-02-07)

  • ConfigParser在Python 2.6上支持allow_no_value,因此我们不允许空值,仅限于2.7或更高版本。[bosim]

1.2.2 (2014-01-03)

错误修复版本

  • 修复了在集合中注册搜索条件的问题,之前的注册破坏了plone.app.registry的导出功能。已添加升级步骤,请升级。[bosim]

1.2.1 (2013-11-12)

错误修复版本,请升级

  • 使用来自plone.supermodel的Schema。修复问题#6 [bosim]

  • 重写了行为创建例程。修复问题#5 [bosim]

1.2 (2013-11-12)

  • 添加collective.js.jqueryui作为依赖项。自动安装。[maurits]

  • i18n修复,消息提取脚本,法语翻译。[thomasdesvenain]

  • 修复vdex导入中的错误。[thomasdesvenain]

  • 避免在没有选择默认语言时导出失败。[thomasdesvenain]

  • 移除对plone.directives的依赖。[thomasdesvenain]

  • 添加elementtree到依赖项。[thomasdesvenain]

1.1 (2013-07-16)

  • 现在可以不上传VDEX文件即可添加分类。[bosim]

  • 分类可以通过GenericSetup再次导出/导入。[bosim]

  • 单选字段现在又可以使用了。[bosim]

1.0 (2013-05-07)

  • 初始版本 [bosim]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分发

collective_taxonomy-3.1.2.tar.gz (3.1 MB 查看散列)

上传于 源代码

构建发行版

collective.taxonomy-3.1.2-py3-none-any.whl (419.5 kB 查看哈希值)

上传于 Python 3

支持