隐藏@@ personal-information视图中的自定义字段

时间:2011-05-30 09:31:59

标签: plone

我正在关注collective.examples.userdata以在注册表单上添加一些自定义字段。

一个字段是“接受条款”,ceuserdata也有文件,并且如package description所述(或者至少我理解这种方式),特殊的“接受条款”字段应该只是在注册表上显示,但不在@@个人信息视图上。

我还尝试在我的buildout上添加ceuserdata和一个全新的Plone网站,它也显示在@@ personal-information上,所以我想知道这是不是被我误解了,或者那里有一个bug。

任何人都知道如何在@@注册表上显示一个字段,但将其隐藏在@@ personal-information上?

1 个答案:

答案 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,因为这个特定的类没有改变。