主要用例
该小部件提供与 AT Keywordwidget 相同的功能,并带来一些好处。
AT 小部件的功能
通过权限/角色保护添加新术语
显示所有可能的值
添加新术语
好处
可配置的 select2 小部件
小部件的正常默认值
z3c.form 小部件
基于 SelectWidget(无需新转换器等)
每个字段/小部件可配置“添加新术语权限”
使用select2的z3c表单关键字小部件。
ftw.keywordwidget 提供了六个功能
一个小部件,它加载 select2 以提高单选和多选字段的可用性。
一个 ChoicePlus 字段,允许新术语。这防止我们创建一个具体的、复杂的来源,该来源允许新项目。
为新的术语渲染一个额外的 New Entry 文本区域。
使用 select2 的标签功能来添加新关键词。
一个异步选项,用于使用 select2 AJAX 选项获取可选择的选项。
结果和所选项目的自定义模板
该小部件支持 schema.Choice、schema.Tuple 和 schema.List 字段。
此包提供的 ICategorization 行为依赖于 plone 默认索引“主题”。在 DX 中,“主题”是“subject”的访问器,它返回 utf-8。“subject”本身有一个属性获取器“subjects”,其中存储了实际值。
Plone KeywordsVocabulary 使用目录值构建其术语,在“主题”索引的情况下是 utf-8。按照惯例,索引值应始终为 utf-8,DX 值应始终为 unicode。
这意味着在 KeywordsVocabulary 的情况下,值需要存储为 utf-8,因为词汇表值已编码为 utf-8。SequenceWidget fieldToWidget 转换器包含一个健全性检查,确保只计算也是词汇表中的字段值。这意味着如果您将新术语作为 unicode 值存储,整个系统就会崩溃。当前该小部件确保与“主题”索引完美工作,该索引依赖于 utf-8 值,这在 DX 类型中并不常见。
除了主要的使用案例之外,该小部件还支持具有 unicode 值的词汇表,但需要在小部件上单独进行配置。然后,新术语作为 unicode 而不是 utf-8 添加。
directives.widget('unicode_keywords', KeywordFieldWidget, new_terms_as_unicode=True) unicode_keywords = schema.Tuple( title=u'UnicodeTags', value_type=ChoicePlus( title=u"Multiple", vocabulary='ftw.keywordwidget.UnicodeKeywordVocabulary', ), required=False, missing_value=(), )
异步选项只能在源是 z3c.formwidget.query.interfaces 的 IQuerySource 时使用。该接口通过一个 search 方法扩展了 ISource 规范,这对于异步选项至关重要。
基本上,如果 async=True,select2 小部件会通过一个给定的搜索词向一个搜索端点请求可能的选项。此外,搜索端点查询字段上定义的 IContentSourceBinder。
directives.widget('async', KeywordFieldWidget, async=True) async = schema.Tuple( title=u'Some async values', value_type=ChoicePlus( source=MySourceBinder(), ), required=False, missing_value=(), )
该小部件提供与 AT Keywordwidget 相同的功能,并带来一些好处。
AT 小部件的功能
通过权限/角色保护添加新术语
显示所有可能的值
添加新术语
好处
可配置的 select2 小部件
小部件的正常默认值
z3c.form 小部件
基于 SelectWidget(无需新转换器等)
每个字段/小部件可配置“添加新术语权限”
还有几个其他 plone 4.x 的 z3c form 小部件,提供了类似的功能集,如 collective.z3cform.keywordwidget 或 AutocompleteWidget。
它们不适合主要的使用案例。
此外,您可以根据需要配置 select2 插件。
Plone 4.3.x 和 5.1.x
请注意,Plone 5.1.x 使用 Select2 的 v3.5 版本,而此产品使用 v4.0.2。
将包添加到您的 buildout 配置中
[instance] eggs += ... ftw.keywordwidget
此小部件不会自动应用于所有可能的 select 字段。想法是您根据自己的需要自行集成。
但对于上述提到的主要使用案例,有一个行为
如果需要,安装 default 配置文件和 select2js 配置文件。
在您的内容类型上启用 ftw.keywordwidget.behavior.IKeywordCategorization 行为。
对于一些其他使用案例,您还可以启用 ftw.keywordwidget.behavior.IKeywordUseCases 行为。这启用了单选和多选字段。
请查看 behaviors.py 以获取示例
from ftw.keywordwidget.widget import KeywordFieldWidget class IKeywordUseCases(model.Schema): directives.widget('types', KeywordFieldWidget) types = schema.List( title=u'Types', value_type=schema.Choice( title=u"Multiple", vocabulary='plone.app.vocabularies.PortalTypes', ), required=False, missing_value=(), ) directives.widget('types2', KeywordFieldWidget) types2 = schema.Choice( title=u'Single type', vocabulary='plone.app.vocabularies.PortalTypes', required=False, missing_value=(), ) alsoProvides(IKeywordUseCases, IFormFieldProvider)
您可以通过向小部件工厂提供 js_config 来按需配置 select2。
directives.widget('types', KeywordFieldWidget, js_config={'placeholder': 'Select something...'})
此软件包附带 select2 4.0.2 JS 插件。但它不是默认配置文件中安装的,因为您可能已经为其他目的安装了 select2 JS。如果需要 select2,您可以安装 ftw.keywordwidget Install select2 jquery plugin 配置文件。
您可以定义每个 plone-widget 的自定义模板,或者替换所有使用的关键字小部件的默认小部件。
首先,您需要创建一个新的模板(查看 select2 文档以了解 select2 上下文中的模板是什么)。将其包装在一个构造函数函数中,以便访问小部件本身(上下文感知)。
function myPurpleTemplate(widget) {
return function(data) {
return $('<span style="background-color:purple" />').text(data.text);
}
}
function myBlueTemplate(widget) {
return function(data) {
return $('<span style="background-color:blue" />').text(data.text);
}
}
然后您需要注册它
$(document).on('ftwKeywordWidgetInit', function(e) {
window.ftwKeywordWidget.registerTemplate('purple', myPurpleTemplate);
window.ftwKeywordWidget.registerTemplate('blue', myBlueTemplate);
});
并在您期望的小部件中使用它
directives.widget('colours', KeywordFieldWidget,
template_selection='purple'
template_result='blue')
colours = schema.Tuple(
title=u'Some colours',
value_type=ChoicePlus(source=MySourceBinder()),
required=False,
missing_value=(),
)
如果您希望覆盖默认模板,只需为以下模板注册模板:
defaultResultTemplate 或 defaultSelectionTemplate,具体取决于您想覆盖哪个默认模板。
function myBlackTemplate(data) {
return $('<span style="background-color:black" />').text(data.text);
}
$(document).on('ftwKeywordWidgetInit', function(e) {
window.ftwKeywordWidget.registerTemplate('defaultResultTemplate', myBlackTemplate);
});
Python
分支此存储库
克隆您的分支
Shell: ln -s development.cfg buidlout.cfg
Shell: python boostrap.py
Shell: bin/buildout
运行 bin/test 以测试您的更改。
或通过运行 bin/instance fg 来启动实例。
此软件包由 4teamwork 版权所有。
ftw.keywordwidget 根据 GNU 通用公共许可证,版本 2 许可。
修复无效的初始化,例如在 PAM 视图中。[mathias.leimgruber]
确保自定义焦点事件不会在非关键字wifget select2 字段上触发。[mathias.leimgruber]
将 Plone 5 升级步骤移动到正确的文件夹,以便 ftw.upgrade 可以获取它。[Nachtalb]
停止为 JavaScript 生成 sourcemaps(它不与 Plone 一起使用)。[djowett-ftw]
修复初始化过早时的空 select2 小部件。[Nachtalb]
修复 Plone5 JS 初始化 + 修复在标签页更改时加载关键字小部件。[mathias.leimgruber]
修复产品以在 Plone5 生产环境中运行(解决 #46)[djowett-ftw]
修复点击事件以编辑表单标签页(解决 #42)[djowett-ftw]
在构建词汇表之前明确清除 collective.indexing 队列,以解决一些竞态条件,在这些条件下目录内容不是最新的。[lgraf]
确保来自 KeywordSearchableSource 的术语有一个标题。[njohner]
将变更日志附加到 long_description。[Nachtalb]
允许在非异步模式下使用来源。[njohner]
允许在异步模式下添加新术语。[njohner]
修复了一个错误,即在使用另一个异步小部件后不再可能添加标签。[elioschmutz]
添加对 Plone 5.1.x 的支持。[mbaechtold]
将 select2 的新版本集成到关键字小部件资源中,以防止与 plone 所需的旧版 select2 发生冲突。[mathias.leimgruber, busykoala]
修复法语翻译。[phgross]
从 ChoicePlus 中删除不适当的父级验证的父级。[Rotonen]
重大更改:不允许在初始化时设置自定义权限。[Rotonen]
将意外持续存在的权限检查从字段移动到小部件,并将结果缓存在请求中。[Rotonen]
修复了一个问题,即术语查找会在表单验证后失败。https://github.com/4teamwork/ftw.keywordwidget/issues/27 [elioschmutz]
在初始化小部件后添加事件。[elioschmutz]
为select2小部件添加添加模板的功能。[elioschmutz]
只有当它确实是一个新选中的术语时,才将术语添加到新字段列表中。[mathias.leimgruber]
修复了一个我在1.3.3中引入的,但在1.3.4中未捕获的bug :-( [mathias.leimgruber]
自动打开单值字段的搜索菜单。[mathias.leimgruber]
修复Bug:修复单值字段上的JS错误。[mathias.leimgruber]
修复Bug:如果项目没有被“真正”选中,则不再添加项目。[mathias.leimgruber]
删除了无< cite>factory配置的行为的冗余< cite>for属性。[phgross]
添加了法语翻译。[phgross]
修复Bug:在搜索端点不使用值作为id。[mathias.leimgruber]
修复Bug:由于self.value存储小部件的值,因此通过令牌而不是值获取存储的术语。[mathias.leimgruber]
为具有异步选项的关键字小部件添加测试浏览器小部件。[mathias.leimgruber]
不再在控件中内联加载关键字小部件的JS。[mathias.leimgruber]
实现新的异步选项。[mathias.leimgruber]
实现新的选项,以创建具有Unicode值的新术语,而不是UTF-8。[mathias.leimgruber]
始终隐藏新条目字段。[mathias.leimgruber]
不再使用非ASCII字符重复关键字。[deiferni]
当表单包括控件且具有验证错误时,不要删除用户输入。[deiferni]
修复用户仅向控件中插入一个关键字时的问题。[elioschmutz]
修复selec2js配置文件路径到select2资源的错误。[deiferni]
将select2从4.0.3降级到4.0.2以修复ie11问题。请参阅https://github.com/select2/select2/issues/4525。[elioschmutz]
将select2文件移至不带版本后缀的文件夹。这使得在没有升级步骤的情况下升级/降级select2版本变得更加容易。[elioschmutz]
修复Bug:有关词汇表和select2的标签功能。[mathias.leimgruber]
添加i18n辅助程序以进行翻译。[mathias.leimgruber]
实现select2标签选项以添加新关键字。这隐藏了新关键字文本区域。警告:这是新的默认值,您可以通过传递< cite>tags: false来禁用它。[mathias.leimgruber]
添加对< cite>schema.Tuple字段的支持。[mathias.leimgruber]
禁用已压缩的“select2.min.js”的压缩。[mbaechtold]
将“添加新术语权限”配置为可配置的,并支持lawgiver。[mathias.leimgruber]
如果覆盖内容被替换,则重新初始化select2。[mathias.leimgruber]
初始化发布 [mathias.leimgruber]
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 77c0330e25fc7095ed083e4b85f31cd28fd5aed926ba3055316e33d866068c69 |
|
MD5 | 91b3f5c4432cebb658ead2cb3d87ea54 |
|
BLAKE2b-256 | d8c970dff29eec2226fb7c3d09b7f075f2c3c929f0cd0b525c80f7e8d204f52a |
支持者