我正在关注collective.examples.userdata以在注册表单上添加一些自定义字段.
一个字段是cecepdata也有的"接受条款"和文件,并且如包装描述(或至少我理解的那样),特殊的"接受条款"字段只应在注册表上显示,但不能在@@个人信息视图中.
我还尝试在我的buildout上添加ceuserdata和一个全新的Plone站点,它也显示在@@ personal-information上,所以我想知道它是否被我误解或者那里有一个bug.
任何人都知道如何在@@注册表上显示一个字段,但将其隐藏在@@ personal-information上?
隐藏@@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,因为这个特定的类没有改变.