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

gfo*_*ada 4 plone

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

一个字段是cecepdata也有的"接受条款"和文件,并且如包装描述(或至少我理解的那样),特殊的"接受条款"字段只应在注册表上显示,但不能在@@个人信息视图中.

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

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

Mar*_*ers 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')
Run Code Online (Sandbox Code Playgroud)

请注意.omit('acceptTerms'),我不得不猜出你的额外字段的名称.然后,您可以在主题浏览器层上使用ZCML注册此自定义面板,或直接在Plone站点或自定义界面上注册.在这里,我采取简单的方法并为Plone站点对象注册它:

<browser:page
    for="Products.CMFPlone.Portal.PloneSite"
    name="personal-information"
    class=".mymodule.CustomizedUserDataPanel"
    permission="cmf.SetOwnProperties"
    />
Run Code Online (Sandbox Code Playgroud)

这应该适用于Plone 4.0和4.1,因为这个特定的类没有改变.