如何为三方插件创建控制面板表单?
如何为三方插件创建控制面板表单?
http://www.315ok.org/blogfolder/387
http://www.315ok.org/logo.png
如何为三方插件创建控制面板表单?
如何为三方插件创建控制面板表单?
三方插件采用控制面板来配置模块参数,能显著提高插件的灵活性和易用性。但是如何正确创建控制面板表单对于新手来说是个挑战。本文以一个样例代码来回答这个问题。
我们采用基于z3c.form的plone.app.registry 模块可以方便地构建控制面板表单,下面举例说明,控制面板接口定义在 IOptiluxSettings.
控制面板视图定义在 controlpanel.py中,包括如下:
standard grokkers for the RegistryEditForm base class):
在plone.app.register中注册记录registry.xml:
我们采用基于z3c.form的plone.app.registry 模块可以方便地构建控制面板表单,下面举例说明,控制面板接口定义在 IOptiluxSettings.
控制面板视图定义在 controlpanel.py中,包括如下:
from plone.z3cform import layout
from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.app.registry.browser.controlpanel import \
ControlPanelFormWrapper
from optilux.cinemacontent.interfaces import IOptiluxSettings
from optilux.cinemacontent import CinemaMessageFactory as _
class OptiluxControlPanelForm(RegistryEditForm):
schema = IOptiluxSettings
label = _(u"Optilux control panel")
OptiluxControlPanelView = layout.wrap_form(OptiluxControlPanelForm,
ControlPanelFormWrapper)
这儿,我们首先创建一个孤立的表单类,然后包装它到一个浏览器视图,采用这种模式,方便plone.app.registry 模块控制关联这个表单的页面模板。这个视图在configure.zcml中注册 (there are nostandard grokkers for the RegistryEditForm base class):
<browser:page
for="plone.app.layout.navigation.interfaces.INavigationRoot"
name="optilux-controlpanel"
class=".controlpanel.OptiluxControlPanelView"
permission="cmf.ManagePortal"
/>
我们采用profiles/default/controlpanel.xml配置文件通过GenericSetup安装到控制面板。<?xml version="1.0"?>
<object
name="portal_controlpanel"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="optilux.cinemacontent ">
<configlet
title="Optilux settings"
action_id="optilux"
appId="optilux"
category="Products"
condition_expr=""
url_expr="string:${portal_url}/@@optilux-controlpanel"
icon_expr="string:$portal_url/++resource++film_icon.gif"
visible="True"
i18n:attributes="title">
<permission>Manage portal</permission>
</configlet>
</object>
Notice how we reference the view name in url_expr property. We have also reused the Film type's icon as the control panel's icon.在plone.app.register中注册记录registry.xml:
<registry>
<!-- Create records for our settings -->
<records interface="optilux.cinemacontent.interfaces.IOptiluxSettings" />
</registry>