我正在尝试制作一个附加组件,除其他外,还为个人首选项页面添加了另一个选项。我试图在松散相关的主题上从各种指南中如何正确地做到这一点,但我没有运气。我刚刚进入Plone开发,其中很多对我来说有些陌生,所以请善待:)
我在Plone 4.3中做了这一切
当我在网站上启用加载项时,它不会给我任何错误,但是首选项页面上不包含额外字段。
到目前为止,我有类似的东西,忽略奇怪的命名方案。同样,这是从其他指南拼凑而成的,我想在重构之前让它工作。
userdataschema.py
from plone.app.users.browser.personalpreferences import IPersonalPreferences
from zope.interface import Interface
from zope import schema
class IEnhancedUserDataSchema(IPersonalPreferences):
""" Use all the fields from the default user data schema, and add various
extra fields.
"""
buttonsEnabled = schema.Bool(title=u'Transition button widget.',
default=True,
description=u'Uncheck to remove the transition button box from ALL pages.',
required=False
)
adapter.py:
from plone.app.users.browser.personalpreferences import PersonalPreferencesPanelAdapter
from app.statebuttons.userdataschema import IEnhancedUserDataSchema
from zope.interface import implements
class EnhancedUserDataPanelAdapter(PersonalPreferencesPanelAdapter):
"""
"""
implements(IEnhancedUserDataSchema)
def get_buttonEnabled(self):
return self.context.getProperty('buttonsEnabled', '')
def set_buttonsEnabled(self, value):
return self.context.setMemberProperties({'buttonsEnabled': value})
buttonsEnabled = property(get_buttonEnabled, set_buttonsEnabled)
overrides.zcml:
<configure
xmlns="http://namespaces.zope.org/zope"
i18n_domain="collective.examples.userdata">
<adapter
provides=".userdataschema.IEnhancedUserDataSchema"
for="Products.CMFCore.interfaces.ISiteRoot"
factory=".adapter.EnhancedUserDataPanelAdapter"
/>
</configure>
如果有人能就我做错的事情给我一些意见,那就太棒了。如果我离开了标记,我会欣赏一些关于下一步的信息。
答案 0 :(得分:3)
您可以将新字段显示在@@personal-preferences
上,方法是将其添加到现有代码中:
<强>浏览器/ configure.zcml中强>
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser">
<browser:page
for="plone.app.layout.navigation.interfaces.INavigationRoot"
name="personal-preferences"
class=".personalpreferences.CustomPersonalPreferencesPanel"
permission="cmf.SetOwnProperties"
layer="..interfaces.IAppThemeLayer"
/>
</configure>
<强>浏览器/ personalpreferences.py 强>
from plone.app.users.browser.personalpreferences import PersonalPreferencesPanel
from plone.app.users.browser.personalpreferences import LanguageWidget
from plone.app.users.browser.personalpreferences import WysiwygEditorWidget
from zope.formlib import form
from app.statebuttons.userdataschema import IEnhancedUserDataSchema
class CustomPersonalPreferencesPanel(PersonalPreferencesPanel):
form_fields = form.FormFields(IEnhancedUserDataSchema)
# Apply same widget overrides as in the base class
form_fields['language'].custom_widget = LanguageWidget
form_fields['wysiwyg_editor'].custom_widget = WysiwygEditorWidget
请注意,您需要在 profiles / default / browserlayer.xml 中注册的浏览器图层IAppThemeLayer
,并在 profiles / default / memberdata_properties中为您的字段定义存储空间.XML
您可以在plone.app.users.browser.personalpreferences
中了解为什么这是必要的。查看IPersonalPreferences
如下:
class PersonalPreferencesPanel(AccountPanelForm):
...
form_fields = form.FormFields(IPersonalPreferences)
...
架构绑定到IPersonalPreferences
接口。您必须更改控制面板才能更改查找的架构。
相反,您可以使用https://pypi.python.org/pypi/collective.examples.userdata中描述的IUserDataSchema
方法,但正如您所见,为了覆盖@@personal-information
,您需要使用overrides.zcml
,这是一个if-所有其他方式都没有覆盖,并且不是第三方插件中非常受欢迎的公民。
其他人可能不同意但我个人的偏好(我应该说我的IPersonalPreference
?)因为这种问题是为这些设置创建一个专用表格并从中链接到它。个人工具菜单。
答案 1 :(得分:3)
不应该覆盖个人偏好。 只需按照https://pypi.python.org/pypi/plone.app.users
上的文档操作即可似乎你不见了:
userdatascheaprovider
来自plone.app.users.userdataschema的导入IUserDataSchemaProvider class UserDataSchemaProvider(object): 器械(IUserDataSchemaProvider)
def getSchema(self):
"""
"""
return IEnhancedUserDataSchema
componentregistry.xml中的GS配置:
在GS properties.xml中注册您的新字段,以使该字段显示在注册页面上(可选)
<object name="site_properties" meta_type="Plone Property Sheet">
<property name="user_registration_fields" type="lines" purge="False">
<element value="yourfield" />
</property>
</object>
让您的字段显示在个人偏好设置中,请按照https://pypi.python.org/pypi/plone.app.users/1.1.5上的文档进行操作 “如何更新个人信息表”
部分