Plone的表格输入组件。
项目描述
DataGridField
根据 GNU 通用公共许可证发布
适用于 Plone Archetypes 框架的表格输入组件。使用 JavaScript 使输入表格数据的过程更加用户友好 - 插入或删除行时不需要往返 HTTP 请求。
功能
开发者可以设置任意数量的列
用户可以填充任意数量的行
无需提交表单即可插入和删除行
许多不同的列类型
要求
Plone 4(对于 Plone 3,请使用 1.7 分支或 1.6 分支的最新版本,对于 Plone 2.5,请使用 1.6 分支的最新版本)
支持 JavaScript 的浏览器。对于不支持 JavaScript 的浏览器,尚未实现优雅降级。
安装
此版本的 DataGridField 作为 egg 分发在 Python 包索引中。有关为 zope 实例配置 Plone 站点的信息,请参阅安装附加产品教程。
完成此操作后,您可以使用“添加/删除产品”屏幕将 DataGridField 安装到您的站点。有关在演示类型上实验的信息,请参阅下文。
如何使用
当开发一个 Archetypes 内容类型时,您将能够添加一种新的字段类型:DataGridField。存储在此字段中的低级别数据将是字典的 Python 元组。
用于此新型字段的控件是 DataGridWidget。
字段定义
查看所有 DataGridField 配置列表
- 列
所有列 id 的元组。默认是名为“default”的单列。
- fixed_rows
固定行实例的序列,这些行值必须存在。如果删除这些行,则在保存内容时将重新添加。
请参阅代码中的示例以获取实现细节。
- allow_insert
用户可以添加新行。目前仅是 UI 功能,尚未在应用级别进行检查。默认为 True。
- allow_delete
用户可以删除行。目前仅是 UI 功能,尚未在应用级别进行检查。默认为 True。
- allow_reorder
用户可以重新排序行。目前仅是 UI 功能,尚未在应用级别进行检查。默认为 True。
- searchable
如果为 true,则将 DataGridField 的所有内容连接到可搜索文本,并将其提供给文本索引器。默认为 False。
- allow_empty_rows
设置为 false 允许数据中的空行。默认为 True。
- allow_oddeven
设置为 true 以在编辑/查看表单中突出显示奇数/偶数行。默认为 False
小部件定义
当定义一个新的 DataGridWidget 时,您可以管理以下选项
- show_header
选择是否在查看或编辑时显示或隐藏表头。
- 自动插入
当编辑最后一行时,自动添加新行。
- 列
包含列定义的字典。
此选项不是必需的,但您必须提供它以进行高级数据网格配置(见下文)。
列定义
在定义列(使用上面的 widget 定义中的 columns 选项)时,您必须提供一个由以下内容组成的字典
一个必须在 field 的 columns 定义中找到的键。
Column 类(或子类)的实例
每个 Column 实例都有以下选项
- label(必需)
列的漂亮标签。
- col_description
对列范围的其他描述。
- default
列每个新值的默认值。
- default_method
与上面的 default 类似,但必须是可以在上下文中调用的方法的一个属性,而不是静态值(类似于 Archetypes 字段的 default_method)
- visible
定义列是否可见。默认为 True。
- required
如果为 true,则对于提供的每一行,此列的值必须填写。默认为 False。
除了简单的 Column 实现,此产品还将提供其他类型的列类,如
SelectColumn
LinesColumn
LinkColumn
RadioColumn
…
有关列的完整列表和附加选项的详细信息,请参阅源代码。
使用示例
带有三个自由文本列的简单示例
schema = BaseSchema + Schema((
DataGridField('DemoField',
widget = DataGridWidget(),
columns=('column1','column2','The third')
),
))
具有不同列类型和用户友好标签的复杂示例
# Plone imports
from Products.Archetypes.public import DisplayList
from Products.Archetypes.public import *
# Local imports
from Products.DataGridField import DataGridField, DataGridWidget
from Products.DataGridField.Column import Column
from Products.DataGridField.SelectColumn import SelectColumn
class DataGridDemoType(BaseContent):
"""A simple archetype
"""
schema = BaseSchema + Schema((
DataGridField('DemoField',
searchable = True,
columns=("column1", "column2", "select_sample"),
widget = DataGridWidget(
columns={
'column1' : Column("Toholampi city rox",
col_description="Go Toholampi or go home.",
required=True),
'column2' : Column("My friendly name"),
'select_sample' : SelectColumn("Friendly name", vocabulary="getSampleVocabulary")
},
),
),
))
def getSampleVocabulary(self):
"""
"""
""" Get list of possible taggable features from ATVocabularyManager """
return DisplayList(
(("sample", "Sample value 1",),
("sample2", "Sample value 2",),))
有关更多示例,请参阅单元测试代码。
注意事项
从 DataGridField 1.5 开始,如果您希望保留旧方式的自动行插入,这里有一些逻辑 - 否则,在您编辑 DGF 并保存时,将添加一个额外的行。
您必须将属性 auto_insert 设置为 True,以 DataGridWidget
您必须将属性 allow_empty_rows 设置为 False,以 DataGridField
已知错误
有时在 Firefox 中,用户输入一些数据后,列的大小开始变化。不确定这是否是 Firefox 的错误。
预填充的默认值仅适用于文本和选择列
单选按钮和链接列的回发处理不当。这需要在 Zope(ZPublisher)中非常深入地修复。如果表单验证失败,链接列和单选按钮列将丢失其值。
由于 HTML 不兼容,并非所有类型的列都受所有浏览器的支持。有关详细信息,请参阅https://w3schools.org.cn/tags/tag_input.asp。
演示
包含一个演示类型。默认情况下已禁用。此类型既不美观也不非常实用,但演示了数据网格应该如何使用。您可以通过在 ZMI 中的“通用设置工具”中运行“DataGridField(示例 DGF 内容类型)”将此类型安装到您的站点中。
参考
贡献者
使这一切成为现实的人
Mikko Ohtamaa,Red Innovation
Danny Bloemendaal
Radim Novotny
Justin Ryan
Alexander Limi
PloneSolutions <info@plonesolutions.com>
Martin Aspeli <optilude@gmx.net>
保罗·埃弗特,Zope欧洲协会 <paul@zope-europe.org>
开发得到了文森特·博纳米的帮助
毛里茨·范·里斯
安德烈亚斯·容格
T Kim Nguyen <nguyen@uwosh.edu>
原始概念和原型
吉耶·贝赫霍尔特,Plone Solutions <info@plonesolutions.com>
保罗·埃弗特,Zope欧洲协会 <paul@zope-europe.org>
赞助
为开发付费的组织
变更日志
1.9.6 (2017-02-21)
修复了在PloneFormGen 1.7.19或更高版本中作为小部件使用时出现的错误。由于它不是acquisition封装的,因此该小部件没有REQUEST属性。[maurits]
1.9.5 (2016-03-22)
在隐藏列时,在查看/编辑模式下都隐藏,没有区别。在“查看”模式下,在生成使用的类“dgw-hidden-column”时,追加列ID,使其像在“编辑”模式下一样,可以使用CSS选择器显示隐藏的列。[gbastien]
1.9.4 (2015-09-07)
在编辑表单中添加新行时,考虑到复选框列的默认值。[gbastien]
1.9.3 (2015-09-07)
确保validate_required正确验证存储的数据,确实,当数据存储时,orderindex_键丢失。[gbastien]
1.9.2 (2015-08-31)
修复了在现代Plone上注册demotypes的错误(默认别名不起作用)[keul]
增加了对Archetypes required属性的真正支持。这可能会废弃isDataGridFilled验证器的需求[keul]
1.9.1 (2014-10-14)
在示例配置文件中添加了新的演示数据字段[tkimnguyen]
删除了旧的nested_scopes导入[tkimnguyen]
增加了对更多类型的字段的支持(DateColumn、DatetimeColumn、DatetimeLocalColumn、FileColumn、EmailColumn、ColorColumn、PasswordColumn、RangeColumn、MonthColumn、SearchColumn、TimeColumn、UrlColumn、WeekColumn),以匹配https://w3schools.org.cn/tags/tag_input.asp中的标签类型。请注意,并非所有浏览器都支持这些!请查看该页面以了解浏览器特定的限制。[tkimnguyen]
葡萄牙语pt-br翻译。[lccruz + jtmolon]
用.png替换Plone中的.gif图像。[maurits]
修复了添加新行时的错误。现在新行的输入具有唯一的ID[cekk]
可访问性修复:将命令图标包裹在链接中,以便可以使用键盘访问[keul]
防止在用户尝试更改单行表格的行顺序时出现JavaScript错误[keul]
可访问性修复:现在列内的每个表单字段都具有一个title属性,该属性重复列的标签[keul]
SelectColumn。在select HTML标签上删除了值属性[keul]
1.9.0 (2013-09-19)
在所有列中支持label参数以及标准关键字参数:col_description、default、default_method、visible、required。子类可能支持更多的参数或关键字参数。[maurits]
不再支持label_msgid在列中。这已经多年未使用。[maurits]
将Column.getLabel更改为再次支持翻译。您应该传递请求作为上下文。[maurits]
新的列选项col_description:显示列用途的帮助文本[keul]
新的列选项required:将列内的数据标记为必需[keul]
为网格图标添加了alpha通道[keul]
在“添加新行”按钮后添加了一个visualClear div。这修复了当字段验证错误发生时的视觉问题。[keul]
将焦点放在新添加的行的第一列上[keul]
1.8.4 (2013-01-04)
添加了意大利语本地化[cekk]
1.8.3 (2012-08-23)
支持SelectColumn类中将浏览器视图名称作为“vocabulary”参数
1.8.2 (2012-08-23)
为操作器表单元格添加了新的CSS类,以便能够附加自定义JS处理程序[ajung]
1.8.1 (2012-06-28)
添加了英语语言环境。对内部包装进行了小的改进。[maurits]
1.8.0 (2012-05-29)
去除值列表中的空格。[WouterVH]
最终发布1.8.0版本。[ajung]
1.8b2 (2011-05-08)
添加了法语翻译。[thomasdesvenain]
在行操作图像上添加了标题。[thomasdesvenain]
使用json解码器修复了使用基本字符串设置字段值的错误。添加了测试。[thomasdesvenain]
修复了LineColumns中对“空”的检查。[ajung]
1.8b1 (2010-08-16)
在zcml中注册本地化目录。[buchi]
添加了德语翻译。[buchi]
1.8a2 (2010-06-02)
当对象的aq_parent为私有时,即使在实际上不需要从该父对象获取任何信息时,也修复了查询DataGrid时出现的未授权错误。(更改已从1.6.2版本移植。)[maurits]
添加了对西班牙语本地化的支持。[macagua]
添加了对i18n的支持。[macagua]
渲染的DGF字段的TD单元格现在包含一个额外的CSS类“col-$colnumber”。[ajung]
从setup.py中移除了无意义的Plone==4锁定,这比解决的问题要多。[saily]
1.8a1 (2009-11-07)
修复了在提交base_metadata表单时可能出现的TypeError。[maurits]
在视图宏中使用提供的访问器,而不是认为我们知道如何获取访问器,因为这样会导致LinguaPlone结果错误。修复了http://plone.org/products/datagridfield/issues/14。[maurits]
修复了Plone 4的测试,包括良好的清理。[maurits]
适应Plone 4/Zope 2.12。对于Plone 3,请使用1.7或1.6分支。[vincentfretin]
1.7 (未发布)
当存在带有template_row_marker的空行且验证失败(对于任何字段)时,确保我们不会出现两个空行。[maurits+vpretre]
添加了LinesColumn(用作PFGDataGrid字段的自定义词汇源)。[naro]
为thead和tbody表格部分添加了唯一的列类名,以便识别列并通过CSS修改其属性(尤其是每个列的宽度)。现在我们可以移除样式属性并清理一些模板代码。[saily]
允许Products.Archetypes.interfaces.IVocabulary提供对象作为词汇表。这使得SelectColumn可以在archetypes.schemaextender中使用,而无需修补扩展类。[jensens]
将安装返回到GenericSetup,结束Plone 2.5.x支持。[andrewb,但真正的感谢属于wichert]
1.6 (2009-01-28)
合并了colliding datagridwidget.css和datagridwidget.css.dtml文件。修复了问题#30:http://plone.org/products/datagridfield/issues/30。最终选择哪个文件似乎是不一致的。如果你依赖于这两个版本的覆盖版本,并注意到与隐藏列和/或行出现或使用FixedColumn添加额外DGF行时出现的错误,你将很好地将你的自定义与合并文件进行协调,这些文件可以从http://dev.plone.org/archetypes/changeset/10445获取。[andrewb]
1.6rc1
添加了Plone 2.5.x DataGridField配置文件“default_25x”,以克服注册我们的皮肤目录时的GS命名空间差异。如果没有这个,就需要手动在portal_skins工具中添加正确的FSDV,以便.pt、.dtml、图像等存在,并且与DataGridWidget的皮肤目录一起。[andrewb]
添加了Extensions和Install.py以及install()函数,以实现一致的添加/移除产品体验,这对于Plone 2.5.x来说没有处理基于GenericSetup配置文件的安装。安装代码将委托给Generic Setup以实现最大程度的代码重用。理由是,在Plone 2.5.x中,在beta 2和beta 3版本之间完全移除添加/移除产品支持是过于极端的。这个解决方案将在未来的版本中得到修正。[andrewb]
注意:这是手动添加的,因为没有历史记录,因为将DataGridField的eggified版本移动,而不是复制,因此没有历史记录:http://dev.plone.org/archetypes/log/Products.DataGridField?action=follow_copy&rev=&stop_rev=&mode=follow_copy
更新了安装说明、示例类型的说明,并添加了关于停止Plone 2.5.x支持的说明。[andrewb]
从示例类型的GS声明中移除了“@@plone_lock_info”的检查,以便在Plone锁定时代之前的动作可以渲染。[andrewb]
在Plone 2.5.x、3.0.x和3.1.x中使所有测试通过。[andrewb]
为 portal_setup 中可能选择的安装的 GS 配置文件制定了明确的名称 [andrewb]
1.6 beta 3
在 Products.AddRemoveWidget 中实现 [SteveM]
正确注册皮肤层。 [maurits]
将安装移动到 GenericSetup。 [wichert]
移除大量不必要的导入。Pyflakes 发现 Plone 2.1 的支持已经中断一段时间了,所以停止声明它仍然受到支持。 [wichert]
添加了 validator isDataGridFilled(从 Poi 复制,稍后可以删除)。如果您想在 DataGridField 上使用它并使其至少有一个条目,请使用此验证器:目前即使删除所有真实条目,仍保留一个虚假/隐藏的条目,因此使 DataGridField 成为必需项没有实际效果。请参阅 http://plone.org/products/poi/issues/139 和 160。 [maurits]
1.6 beta 2
从 config.py 中禁用了 INSTALL_DEMO_TYPES。 [andrewburkhalter]
1.5
弹出帮助列由 Juan Grigera 提供
添加了 CheckboxColumn 由 Radim Novotny 提供
与 Plone 3.0 兼容(修复了 CMFCorePermissions 导入)
修复了 http://plone.org/products/datagridfield/issues/16(应用了补丁)
DataGridField 有一个新属性 allow_oddeven。将此设置为 True 将在查看/编辑表中突出显示奇数行和偶数行。默认:False
FixedColumn 有一个可选参数 "visible"(默认 True)。将此设置为 False 将隐藏(使用 CSS)列,在查看和编辑表单中均不可见。
1.5rc3
添加了 CheckboxColumn。实现基于 RadioColumn,因此存在相同的错误。如果表单上的任何字段引发验证错误,CheckboxColumn 将丢失值。请注意这一点,最好不在具有必填字段或具有验证器的表单中使用 CheckboxColumn。[贡献者:naro,radim novotny]
1.5rc2
修复了 IE 中的行添加问题。这是我遇到的最糟糕的调试会话之一。存在一些神秘的 IE 错误,阻止将原本隐藏的 DOM 节点显示为可见。我为这个问题创建了“hacky”的解决方案。在 IE 6.0 和 FF 1.5 中进行了测试。
Wolfram Fenske 的 I18N 补丁已被禁用,因为它在 Plone 2.5 中不起作用。代码几乎已经完成。如果有人想让它完整, shouldn't take too much time。
1.5rc1
添加了对 DGF 初始化错误的解决方案,这导致当 DGF 以编程方式创建时出现空行
1.0 至 1.5
保证 Plone 2.5 兼容性
DGF 行操作器已重写。现在自动添加新行功能是可选的,这使得列可以具有预填充的默认值而不会造成混乱。对于没有空默认值的 SelectWidget 等列,禁用自动插入是必要的。
重构页面模板代码,使其更容易扩展。现在 CSS 文件用于 DataGridWidgets 的样式。
添加了新列类型:链接列
(Wolfram Fenske) I18N 补丁
Archetypes 小部件有一个属性 i18n_domain,它用于确定使用哪个消息目录进行翻译。在 DataGridField 中,此属性被忽略。
我已经附加了一个小的补丁(实际上,比这个错误报告还要小),它修复了这些问题。我不想引入太多新代码,所以我将 Column 类中的标签翻译,而不是在页面模板中,这可能也是一种好的方法。由于 "getLabel()" 和 "getColumnLabels()" 函数仅在页面模板中调用,因此我认为这不是问题。但如果您希望将标签翻译到页面模板中,请让我知道,我将编写不同的补丁。
(Juan Grigera) Marshaller 补丁
我喜欢您的 DataGriedField/Widget 产品,并想贡献一个小补丁/错误修复。在字段突变者(设置)中,传递的值不总是记录,有时是字符串。实际上,RFC822Marshaller 传递一个字符串。