跳转到主要内容

新(Plone 4) plone.app.users IUserDataSchema的展示。展示了如何扩展注册表单中可以选用的用户数据字段。

项目描述

简介

在Plone 5中,注册和个人信息表单是z3c.form表单。这些表单可以扩展以允许在表单中收集任何额外数据。

此产品旨在展示如何扩展或修改plone.app.users提供的默认模式,并向注册表单添加新字段。

如果您使用的是Plone 5之前的版本,则需要查看这里的较旧版本 collective.examples.userdata

升级者注意

之前,您的 IEnhancedUserDataSchema 是通过在 componentregistry.xml 中注册的 IUserDataSchemaProvider 工具进行注册的。如果您进行了此操作,请确保在升级之前删除此工具。这里 wildcard.fixpersistentutilities 可能会帮到您。

添加自定义用户数据字段

以下代码是从包的源代码中摘录的片段。请查看那里以获取更多示例。

创建架构

我们以与其他架构相同的方式创建字段的架构

class IEnhancedUserDataSchema(model.Schema):
    country = schema.TextLine(
        title=_(u'label_country', default=u'Country'),
        description=_(u'help_country',
                      default=u"Fill in the country you live in."),
        required=False,
        )

扩展用户数据表单

要将此架构添加到表单中,我们需要为 UserDataPanel 定义一个表单扩展器,这允许我们注册任何我们想要的新字段

class UserDataPanelExtender(extensible.FormExtender):
    adapts(Interface, IDefaultBrowserLayer, UserDataPanel)
    def update(self):
        fields = field.Fields(IEnhancedUserDataSchema)
        fields = fields.omit('accept') # Users have already accepted.
        self.add(fields)

并在 configure.zcml 中进行注册

<adapter
  factory=".userdataschema.UserDataPanelExtender"
  provides="plone.z3cform.fieldsets.interfaces.IFormExtender" />

存储/检索自定义字段

为了将值与默认字段一起存储,我们需要向 profiles/default/memberdata_properties.xml 中添加字段。例如

<?xml version="1.0"?>
<object name="portal_memberdata" meta_type="Plone Memberdata Tool">
  <property name="country" type="string"></property>
</object>

我们在这里不定义“接受”字段,因为那只是用于注册。用户必须接受才能在系统中拥有用户。

在值可以通过表单读取和写入之前,需要一个数据管理器来检索值。默认管理器将读取/写入架构中定义的任何字段,因此大部分工作已经为您完成

from plone.app.users.browser.account import AccountPanelSchemaAdapter

class EnhancedUserDataSchemaAdapter(AccountPanelSchemaAdapter):
    schema = IEnhancedUserDataSchema

如果您想做些不同的事情,为该字段添加一个属性以覆盖默认行为。源代码显示了 birthdate 字段的示例。

最后,在 ZCML 中注册数据管理器

<adapter
  provides=".userdataschema.IEnhancedUserDataSchema"
  for="plone.app.layout.navigation.interfaces.INavigationRoot"
  factory=".adapter.EnhancedUserDataSchemaAdapter"
  />

扩展注册表单

要扩展注册表单,您有两个选择。要么使用 @@member-registration 观来操作哪些默认字段可见,或者为了完全控制,您可以注册另一个表单扩展器。

定义注册字段表单扩展器

BaseRegistrationForm 注册扩展器将允许我们在任何位置向注册表单添加字段。这是以前的方式

class RegistrationPanelExtender(extensible.FormExtender):
    adapts(Interface, IDefaultBrowserLayer, BaseRegistrationForm)
    def update(self):
        fields = field.Fields(IEnhancedUserDataSchema)
        #NB: Not omitting the accept field this time, we want people to check it
        self.add(fields)

并在 configure.zcml 中进行注册

<adapter
  factory=".userdataschema.RegistrationPanelExtender"
  provides="plone.z3cform.fieldsets.interfaces.IFormExtender" />

数据管理器附加到架构,因此将与用户数据表单共享。如果我们使用了不同的架构,那么我们还需要定义另一个数据管理器。

各种其他字段示例

还有各种其他额外字段,可以扩展用户配置文件。在 userdataschema.py 中,您将找到以下示例

  • 日期字段 (birthdate)

  • 布尔字段 (newsletter)

  • 选择字段 (gender)

“接受条款”字段

特殊情况是 accept 字段。这是一个布尔字段,对于注册是必需的。我们通过向架构添加一个 constraint 来实现它

def validateAccept(value):
    if not value == True:
        return False
    return True

class IEnhancedUserDataSchema(IUserDataSchema):
    # ...
    accept = schema.Bool(
        title=_(u'label_accept', default=u'Accept terms of use'),
        description=_(u'help_accept',
                      default=u"Tick this box to indicate that you have found,"
                      " read and accepted the terms of use for this site. "),
        required=True,
        constraint=validateAccept,
        )

因为这个字段在注册完成后可以忽略,所以我们没有将其添加到成员数据属性中。我们还将其从用户数据表单中隐藏。

变更日志

2.1 (2014-07-03)

  • 修复损坏的 setup.py,以便生成文档并正确安装。 [lentinj]

2.0 (2014-07-03)

  • 将 z3c.form-based plone.app.users 转换为自定义设置。 [lentinj, vipod, thet]

0.5 (未发布)

  • 尚未更改。

0.4 (2013-12-18)

  • 修复性别词汇表并正确翻译。 (thet)

  • 不要覆盖现有的用户注册字段,只添加接受和国家。 (thet)

  • 添加“出生年份”字段,适用于询问确切出生日期太多的情况。 (thet)

  • 使用本地化目录而不是 i18n 并进行一般清理。 (thet)

  • 迁移到 github (Kees Hink)

  • 添加德语翻译 (Pavel Bogdanovic,2011-10-28).

0.3 (2010-09-26)

  • 通过覆盖 componentregistry.xml 中的实用程序,使自定义字段仅在通过通用设置安装产品时可用 (Elizabeth Leddy)。

  • 添加了包含配置版本信息的metadata.xml。

0.2 (2010-04-12)

  • 覆盖了plone.app.users的适配器类,因此@@personal-information将显示本产品中定义的额外字段。这需要plone.app.users >= 1.0b7。

0.1 (2010-02-28)

  • 初始版本

待办事项

  • 卸载此产品目前会破坏网站。应添加卸载步骤,以将产品添加的字段从ZMI的用户属性中移除。

项目详情


下载文件

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

源分发

collective.examples.userdata-2.1.zip (33.4 kB 查看哈希值)

上传时间

支持者