Formlib小部件,用于管理Plone站点中的plone.app.relations关系。
项目描述
此扩展的目的是提供formlib小部件以编辑plone.app.relation关系。此插件已在Plone 2.5和Plone 3上进行了测试。
接口定义
简单的内容界面,使用自定义的Zope 3关系字段
>>> from infrae.plone.relations.schema import PloneRelation >>> from zope.interface import implements, Interface >>> class ISimpleContent(Interface): ... """Simple interface with relation.""" ... relation = PloneRelation(title=u"A relation", ... relation="relation1")
在用户界面中,使用Zope IntID来跟踪对象。您还可以使用Archetype UID(请检查configure.zcml文件),在这种情况下,所有内容必须来自Archetype的Referenceable类(Products.Archetypes.Referenceable)。
小部件定义
Plone关系小部件是可定制的,您可以选择不同的子小部件来选择要添加到关系中的新项目。这些子小部件可以接受参数。例如,在这里,您可以对content_type进行限制。
此小部件是使用CustomWidgetFactory构建的。
>>> from infrae.plone.relations.form import PloneRelationEditWidget >>> from infrae.plone.relations.form import PloneRelationSearchAddWidget >>> from zope.app.form import CustomWidgetFactory >>> widget_factory = CustomWidgetFactory(PloneRelationEditWidget, ... add_widget=PloneRelationSearchAddWidget, ... add_widget_args=dict(content_type='MySimpleContent'))
目前,有三种不同的小部件来添加关系:一种通过用户输入进行目录搜索并选择结果作为关系对象的小部件,一种列出对象(始终来自目录)的小部件,以及一种使用Zope 3词汇表作为输入的小部件。
infrae.plone.relations.form.utility 提供了简单的构建这些小部件的方法。
表单定义
现在,我们将使用此接口为内容创建一个简单的编辑表单
>>> from Products.Five.formlib import formbase >>> from zope.formlib import form >>> class EditSimpleContentForm(formbase.EditForm): ... label = 'Edit form' ... description = 'Form to edit relation' ... form_fields = form.Fields(ISimpleContent) ... form_fields['relation'].custom_widget = widget_factory
这很容易吗?
实际测试
我们在 example.py 文件中添加了此代码,表单将绑定到文档。我们现在加载它
>>> from Products.Five.zcml import load_string >>> load_string("""<configure xmlns="http://namespaces.zope.org/browser"> ... <page name="relation.html" ... for="infrae.plone.relations.form.example.IPloneRelationExample" ... class="infrae.plone.relations.form.example.PloneRelationEditForm" ... permission="cmf.ModifyPortalContent" /> ... </configure>""")
现在获取一个认证的浏览器
>>> browser = self.getAuthenticatedBrowser()
主页是一个文档,所以我们应该得到我们的表单
>>> browser.open('http://nohost/plone/front-page/relation.html') >>> 'Plone relation edit form' in browser.contents True
因此,我们可以在此添加小部件中搜索Plone,并应该得到一个响应,因为默认情况下只有一个包含单词 Plone 的文档,即主页本身
>>> browser.getControl(name='form.relation.search_value').value='Plone' >>> browser.getControl(name='form.relation.search_button').click()
我们得到了一些结果
>>> add_value = browser.getControl(name='form.relation.add_value:list') >>> add_value.getControl('Welcome to Plone').selected = True >>> browser.getControl(name='form.relation.add_button').click() >>> browser.getControl('Apply').click() >>> 'Updated on' in browser.contents True
您可以在 README.EXT.txt 和 example.py 文件中查看更多测试和示例。
变更
1.0
添加更多测试
移除翻译标记:它们在Plone 3下会引发错误。现在这也适用于Plone 3。
0.9
首次发布,我们需要更多功能测试或单元测试才能发布1.0版。
鸣谢
在比利时弗拉芒政府的帮助下,本小部件的第一版本已发布,用于 http://www.zonderisgezonder.be 应用。
您也可以通过发送您的评论或补丁到作者电子邮件地址(或请求SVN访问)来帮助我们为此产品做出贡献。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。
源分布
构建分布
infrae.plone.relations.form-1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3172453801f7ba8ded86befd5f517456f3d38aa93817e4aed75dc61f4a1ebbfc |
|
MD5 | 7105b892e568a938bc52b785fc97730d |
|
BLAKE2b-256 | e4037a38fd4b6b6dd48f6c1283cbfdd4c8dd67fe65b025b250ae5140d73b1dce |
infrae.plone.relations.form-1.0-py2.4.egg 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3f91db4851f464d4666ed09bc3409e1dfaf49657f659c381a01dec03ba4fdc0d |
|
MD5 | d90cdae59b250964dda5f3dca65accb7 |
|
BLAKE2b-256 | 80f14cc850060e8515585599bb027bafc05df268b1684b5355440c8c7dcc6302 |