问题描述
||
我正在遵循Collective.examples.userdata在注册表单上添加一些自定义字段。
一个字段是“接受条款”,ceuserdata也具有它和文档,并且如包装说明中所述(或至少以我的理解),特殊的“接受条款”字段应仅显示在注册表格,但不在@@ personal-@R_742_4045@ion视图上。
我还尝试使用新的Plone新站点在ceoutdata上添加ceuserdata,它也显示在@@ personal-@R_742_4045@ion上,因此我想知道它是否被我误解了或者是否有错误那里。
有人知道如何在@@ register表单上显示字段,但如何在@@ personal-@R_742_4045@ion上隐藏该字段吗?
解决方法
开箱即用的方式不支持从
@@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\')
,我不得不猜测您额外字段的名称。然后,您可以在主题浏览器层上,或者直接在您的Plone网站或自定义界面上,使用ZCML注册此自定义面板。在这里,我采取了简单的方法并将其注册为Plone站点对象:
<browser:page
for=\"Products.CMFPlone.Portal.PloneSite\"
name=\"personal-information\"
class=\".mymodule.CustomizedUserDataPanel\"
permission=\"cmf.SetOwnProperties\"
/>
这对于Plone 4.0和4.1均适用,因为此特定类未更改。