gpt4 book ai didi

plone - 扩展个人偏好页面

转载 作者:行者123 更新时间:2023-12-05 00:27:47 25 4
gpt4 key购买 nike

我正在尝试制作一个附加组件,其中包括向个人偏好页面添加另一个选项。我试图从松散相关主题的各种指南中拼凑出如何正确地做到这一点,但我没有运气。我刚刚进入 Plone 开发,其中很多对我来说有些陌生,所以请善待:)

我在 Plone 4.3 中做这一切

当我在网站上启用插件时,它不会给我任何错误,但额外字段不包含在首选项页面中。

到目前为止,我有这样的东西,忽略奇怪的命名方案。同样,这是从其他指南拼凑而成的,我想在重构之前让它工作。

用户数据架构.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
)

适配器.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)

覆盖.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>

如果有人能给我一些关于我做错了什么的意见,那就太棒了。如果我离题了,我会很感激一些关于下一步去哪里的意见。

最佳答案

您可以在 @@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

请注意,您需要一个浏览器层 IAppThemeLayer在profiles/default/browserlayer.xml 中注册,并在profiles/default/memberdata_properties.xml 中为您的字段定义存储。

您可以在 plone.app.users.browser.personalpreferences 中了解为什么这是必要的。 . IPersonalPreferences查找如下:
class PersonalPreferencesPanel(AccountPanelForm):

...
form_fields = form.FormFields(IPersonalPreferences)
...

模式绑定(bind)到 IPersonalPreferences界面。您必须更改控制面板才能更改查找的架构。

相反,您可以使用 IUserDataSchema https://pypi.python.org/pypi/collective.examples.userdata 中描述的方法但正如您所见,为了覆盖 @@personal-information您需要使用 overrides.zcml这是一种 if-all-else-fails 覆盖,在第三方插件中不是非常受欢迎的公民。

其他人可能不同意,但我个人的偏好(我应该说我的 IPersonalPreference 吗?)对于此类问题是为设置创建一个专用表单并从例如链接到它。个人工具菜单。

关于plone - 扩展个人偏好页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com