关于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>

 

设置