後台開發:設計configlet
在plone中,後台的設定版面,稱為configlet,以下直接以範例來示範如何設計一個configlet
1.先開一個browserview, 在configure.zcml中,加入以下一段
<browser:page
name="mysiteClassSettingControlPanel"
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
permission="cmf.ManagePortal"
class=".userdataschema.MysiteClassSettingControlPanelView"
/>
說明:
name: 網址的一部份
for: 設定是plone站點使用
permission: 設定權限,因為是後台,所以理當是cmf.ManagePortal
class: 看這個view會放在那裏,以本例,是放在 userdataschema.py裏面
2. 設計 interfaces 及 form
from plone.app.registry.browser.controlpanel import RegistryEditForm
from plone.app.registry.browser.controlpanel import ControlPanelFormWrapper
from plone.z3cform import layout
from z3c.form import form
from plone.directives import form as Form
class IMysiteClassSetting(Form.Schema):
classSetup = schema.Text(
title=_(u"Class setup"),
required=False,
)
class MysiteClassSettingControlPanelForm(RegistryEditForm):
form.extends(RegistryEditForm)
schema = IMysiteClassSetting
MysiteClassSettingControlPanelView = layout.wrap_form(MysiteClassSettingControlPanelForm, ControlPanelFormWrapper)
MysiteClassSettingControlPanelView.label = _(u"Mysite class setting")
3.編輯 profiles/default/controlpanel.xml ,內容如下
<?xml version="1.0"?>
<object
name="portal_controlpanel"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="mysite.userdata">
<configlet
title="Mysite class setup"
action_id="ysite.userdata.classsetting"
appId="mysite.userdata"
category="Products"
condition_expr=""
url_expr="string:${portal_url}/@@mysiteClassSettingControlPanel"
icon_expr="string:/favicon.ico"
visible="True"
i18n:attributes="title">
<permission>Manage portal</permission>
</configlet>
</object>
4.編輯 profiles/default/registry.xml,內容如下
<registry>
<records interface="mysite.userdata.userdataschema.IMysiteClassSetting" />
</registry>
完成,接著重新啟動網站,再到後台「擴充模組」將該模組重新安裝一次,即可見到成果
接下來,如果要在程式中使用到後台的設定值,可以如下方式
python code,最簡單的方式是使用plone.api,如下:
from plone import api
api.portal.get_registry_record('mysite.userdata.userdataschema.IMysiteClassSetting.classSetup')
若是在 template的 .pt檔中,則可使用TAL語法,如下:
python:context.portal_registry['mysite.userdata.userdataschema.IMysiteClassSetting.classSetup']
註:本篇範例中,classSetup,或mysiteClass,其中的class, 指的是課程,與類別(class)無關,請讀者細察。