扩展个人偏好页面

时间:2013-11-13 23:06:26

标签: plone

我正在尝试制作一个附加组件,除其他外,还为个人首选项页面添加了另一个选项。我试图在松散相关的主题上从各种指南中如何正确地做到这一点,但我没有运气。我刚刚进入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>

如果有人能就我做错的事情给我一些意见,那就太棒了。如果我离开了标记,我会欣赏一些关于下一步的信息。

2 个答案:

答案 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上的文档进行操作 “如何更新个人信息表”

部分