关于Plone5 的vocabulary管理和应用
关于Plone5 的vocabulary管理和应用
http://www.315ok.org/blogfolder/1005
http://www.315ok.org/logo.png
关于Plone5 的vocabulary管理和应用
关于Plone5 的vocabulary管理和应用
关于Plone5 的vocabulary管理和应用
1、vocabulary词汇 生成
从注册表读取词汇值
from zope.interface import implements
from zope.schema.interfaces import IContextSourceBinder
from zope.schema.vocabulary import SimpleVocabulary
from plone.registry.interfaces import IRegistry
from zope.component import getUtility
from zope.interface import directlyProvides
from 315ok.demo.patch.zh import normalizer
from 315ok.demo.interface import IDocTypeSettings
def DocTitle(context):
"""Context source binder to provide a vocabulary of document's title.
"""
settings = getUtility(IRegistry).forInterface(IDocTypeSettings)
terms = []
pttl = context.title
for item in settings.types:
docttl = "%s%s" %(pttl,item)
asciittl = normalizer.normalize(docttl)
terms.append(SimpleVocabulary.createTerm(docttl, asciittl, docttl))
return SimpleVocabulary(terms)
directlyProvides(DocTitle, IContextSourceBinder)
2、词汇的使用
#-*- coding: UTF-8 -*-
from zope import schema
from plone.autoform import directives
from z3c.form.interfaces import IAddForm
from z3c.form.interfaces import IEditForm
from plone.app.dexterity import _
from 315ok.demo.indexer import IProjectContent
from 315ok.demo.browser.vocabulary import DocTitle
class IDocument(IProjectContent):
"""
document content type
"""
title = schema.Choice(
title=_(u'label_title'),
source=DocTitle,
required=True,
)
3、vocabulary词汇 的控制面板配置修改
from plone.app.registry.browser import controlpanel
from 315ok.demointerface import IDocTypeSettings
from 315ok.demo import _
try:
# only in z3c.form 2.0
from z3c.form.browser.textlines import TextLinesFieldWidget
except ImportError:
from plone.z3cform.textlines import TextLinesFieldWidget
class DocTypeSettingsEditForm(controlpanel.RegistryEditForm):
schema = IDocTypeSettings
label = _(u"Document types settings")
# schema_prefix = "projectconf"
description = _(u"Please enter details of available types")
def updateFields(self):
super(DocTypeSettingsEditForm, self).updateFields()
self.fields['types'].widgetFactory = TextLinesFieldWidget
def updateWidgets(self):
super(DocTypeSettingsEditForm, self).updateWidgets()
self.widgets['types'].rows = 8
class DocTypeSettingsControlPanel(controlpanel.ControlPanelFormWrapper):
form = DocTypeSettingsEditForm
4、vocabulary词汇 控制面板视图配置
...
<!-- Control panel form -->
<browser:page
name="type-settings"
for="Products.CMFPlone.interfaces.IPloneSiteRoot"
class=".controlpanel.DocTypeSettingsControlPanel"
permission="cmf.ManagePortal"
/>
...
5、vocabulary词汇 默认值配置
<registry>
<record name="315ok.demo.interface.IDocTypeSettings.types"
interface="315ok.demo.interface.IDocTypeSettings" field="types">
<default/>
<field type="plone.registry.field.Set">
<description xmlns:ns0="http://xml.zope.org/namespaces/i18n" ns0:domain="315ok.demo" ns0:translate="">List document types here. </description>
<title xmlns:ns0="http://xml.zope.org/namespaces/i18n" ns0:domain="315ok.demo" ns0:translate="">document types</title>
<value_type type="plone.registry.field.TextLine">
<title xmlns:ns0="http://xml.zope.org/namespaces/i18n" ns0:domain="315ok.demo" ns0:translate="">document type</title>
</value_type>
</field>
<value>
<element>分析文档</element>
<element>设计文档</element>
<element>诊断文档</element>
<element>评估文档</element>
</value>
</record>
</registry>