Plone:向用户(成员)添加其他注册字段

时间:2015-10-08 14:00:48

标签: plone plone-4.x

我的组对象有两个额外的字段(如描述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)

1 个答案:

答案 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配置其他用户数据字段

相关问题