我正在关注collective.examples.userdata以在注册表单上添加一些自定义字段。
一个字段是“接受条款”,ceuserdata也有文件,并且如package description所述(或者至少我理解这种方式),特殊的“接受条款”字段应该只是在注册表上显示,但不在@@个人信息视图上。
我还尝试在我的buildout上添加ceuserdata和一个全新的Plone网站,它也显示在@@ personal-information上,所以我想知道这是不是被我误解了,或者那里有一个bug。
任何人都知道如何在@@注册表上显示一个字段,但将其隐藏在@@ personal-information上?
答案 0 :(得分:7)
隐藏@@personal-information
表单中的字段并仅在@@register
表单上显示该字段不支持开箱即用,只是相反。
您必须自定义一个或另一个表单才能完成此操作;自定义plone.app.users.browser.personalpreferences.UserDataPanel以删除您的字段或提供新版本的plone.app.users.browser.register.RegistrationForm以在那里添加您的字段。
我是这样做的:
plone.app.users.browser.personalpreferences import UserDataPanel
class CustomizedUserDataPanel(UserDataPanel):
def __init__(self, context, request):
super(CustomizedUserDataPanel, self).__init__(context, request)
self.form_fields = self.form_fields.omit('acceptTerms')
注意.omit('acceptTerms')
,我不得不猜出你额外字段的名称。然后,您可以在主题浏览器层上使用ZCML注册此自定义面板,或直接在Plone站点或自定义界面上注册。在这里,我采取简单的方法并为Plone站点对象注册它:
<browser:page
for="Products.CMFPlone.Portal.PloneSite"
name="personal-information"
class=".mymodule.CustomizedUserDataPanel"
permission="cmf.SetOwnProperties"
/>
这应该适用于Plone 4.0和4.1,因为这个特定的类没有改变。