如何为三方插件创建控制面板表单?

如何为三方插件创建控制面板表单?
三方插件采用控制面板来配置模块参数,能显著提高插件的灵活性和易用性。但是如何正确创建控制面板表单对于新手来说是个挑战。本文以一个样例代码来回答这个问题。
我们采用基于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 no
standard 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>
设置