跳转到主要内容

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.txtexample.py 文件中查看更多测试和示例。

变更

1.0

  • 添加更多测试

  • 移除翻译标记:它们在Plone 3下会引发错误。现在这也适用于Plone 3。

0.9

  • 首次发布,我们需要更多功能测试或单元测试才能发布1.0版。

鸣谢

在比利时弗拉芒政府的帮助下,本小部件的第一版本已发布,用于 http://www.zonderisgezonder.be 应用。

您也可以通过发送您的评论或补丁到作者电子邮件地址(或请求SVN访问)来帮助我们为此产品做出贡献。

项目详情


下载文件

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

源分布

infrae.plone.relations.form-1.0.tar.gz (17.4 kB 查看哈希值)

上传时间

构建分布

infrae.plone.relations.form-1.0-py2.4.egg (49.6 kB 查看哈希值)

上传时间

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面