Plone:为用户(成员)添加额外的注册字段
Plone: Add additional registration fields to users (members)
我的组对象有两个附加字段(如 here 所述)。
现在我的成员对象也需要(其他)附加字段(短字符串)。我已经在 portal_memberdata/manage_propertiesForm
中创建了它们,但我仍然不能 select 它们用于注册表单使用 (@@member-registration
)。
我需要两个新的注册字段,至少其中一个是必填的。我怎样才能做到这一点?谢谢!
更新:
我找到 plone.app.users.userdataschema
并将我的字段添加到界面 IUserDataSchema
;此外,我 monkeypatched plone.app.users.browser.personalpreferences.UserDataPanelAdapter
。似乎仍然缺少一些东西(@@member-registration
中没有可见的变化)。
我的自定义代码如下所示:
from plone.app.users.userdataschema import IUserDataSchema
from zope import schema
from Products.CMFPlone import PloneMessageFactory as _
IUserDataSchema.custom1 = schema.ASCIILine(
title=_(u'label_custom1',
default=u'Custom1 member id'),
description=_(u'help_custom1_creation',
default=u'Custom1 membership is required; '
u'please enter your member id'),
required=True)
from plone.app.users.browser.personalpreferences import UserDataPanelAdapter
def set_custom1(self, value):
if value is None:
value = ''
return self.context.setMemberProperties({'custom1': value})
def get_custom1(self):
return self._getProperty('custom1')
UserDataPanelAdapter.custom1 = property(get_custom1, set_custom1)
我用monkeypatched原版接口的时候没用class;
但它 确实 可以将 UserDataSchemaProvider
monkeypatch 到 return 子 class:
from plone.app.users.userdataschema import IUserDataSchema
from plone.app.users.userdataschema import UserDataSchemaProvider
from zope import schema
from Products.CMFPlone import PloneMessageFactory as _
class IUserDataSchemaExtended(IUserDataSchema):
"""
Extends the userdata schema
by a mandatory field
"""
customField1 = schema.ASCIILine(
title=_(u'label_customField1',
default=u'CustomField1 member id'),
description=_(u'help_customField1_creation',
default=u'CustomField1 membership is required; '
u'please enter your member id'),
required=True)
def getExtendedSchema(self):
return IUserDataSchemaExtended
UserDataSchemaProvider.getSchema = getExtendedSchema
from plone.app.users.browser.personalpreferences import UserDataPanelAdapter
def set_customField1(self, value):
if value is None:
value = ''
return self.context.setMemberProperties({'customField1': value})
def get_customField1(self):
return self._getProperty('customField1')
UserDataPanelAdapter.customField1 = property(get_customField1, set_customField1)
备注:
当注册页面为 quickedit
时,简单地使用 customField1
作为可翻译标题而不是 label_customField
作为字段使用的名称可能更好埃德
对于 Plone 5,显然可以通过 XML
配置额外的用户数据字段
我的组对象有两个附加字段(如 here 所述)。
现在我的成员对象也需要(其他)附加字段(短字符串)。我已经在 portal_memberdata/manage_propertiesForm
中创建了它们,但我仍然不能 select 它们用于注册表单使用 (@@member-registration
)。
我需要两个新的注册字段,至少其中一个是必填的。我怎样才能做到这一点?谢谢!
更新:
我找到 plone.app.users.userdataschema
并将我的字段添加到界面 IUserDataSchema
;此外,我 monkeypatched plone.app.users.browser.personalpreferences.UserDataPanelAdapter
。似乎仍然缺少一些东西(@@member-registration
中没有可见的变化)。
我的自定义代码如下所示:
from plone.app.users.userdataschema import IUserDataSchema
from zope import schema
from Products.CMFPlone import PloneMessageFactory as _
IUserDataSchema.custom1 = schema.ASCIILine(
title=_(u'label_custom1',
default=u'Custom1 member id'),
description=_(u'help_custom1_creation',
default=u'Custom1 membership is required; '
u'please enter your member id'),
required=True)
from plone.app.users.browser.personalpreferences import UserDataPanelAdapter
def set_custom1(self, value):
if value is None:
value = ''
return self.context.setMemberProperties({'custom1': value})
def get_custom1(self):
return self._getProperty('custom1')
UserDataPanelAdapter.custom1 = property(get_custom1, set_custom1)
我用monkeypatched原版接口的时候没用class;
但它 确实 可以将 UserDataSchemaProvider
monkeypatch 到 return 子 class:
from plone.app.users.userdataschema import IUserDataSchema
from plone.app.users.userdataschema import UserDataSchemaProvider
from zope import schema
from Products.CMFPlone import PloneMessageFactory as _
class IUserDataSchemaExtended(IUserDataSchema):
"""
Extends the userdata schema
by a mandatory field
"""
customField1 = schema.ASCIILine(
title=_(u'label_customField1',
default=u'CustomField1 member id'),
description=_(u'help_customField1_creation',
default=u'CustomField1 membership is required; '
u'please enter your member id'),
required=True)
def getExtendedSchema(self):
return IUserDataSchemaExtended
UserDataSchemaProvider.getSchema = getExtendedSchema
from plone.app.users.browser.personalpreferences import UserDataPanelAdapter
def set_customField1(self, value):
if value is None:
value = ''
return self.context.setMemberProperties({'customField1': value})
def get_customField1(self):
return self._getProperty('customField1')
UserDataPanelAdapter.customField1 = property(get_customField1, set_customField1)
备注:
当注册页面为
quickedit
时,简单地使用customField1
作为可翻译标题而不是label_customField
作为字段使用的名称可能更好埃德对于 Plone 5,显然可以通过 XML
配置额外的用户数据字段