我的组对象有两个额外的字段(如描述here)。
现在我还需要(其他)我的成员对象的其他字段(短字符串)。我已在portal_memberdata/manage_propertiesForm
创建了它们,但我仍然无法选择它们进行注册表单使用(@@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)
答案 0 :(得分:2)
当我使用monkeypatched原始接口类时,它没有工作;
但它 工作以monkeypatch UserDataSchemaProvider
返回一个子类:
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)
<强>说明:强>
最好只使用customField1
作为可翻译标题,而不是label_customField
作为注册页面为quickedit
时使用字段的名称
使用Plone 5,显然可以通过XML配置其他用户数据字段