dropdown field: use standard Zope3 source/vocabulary mechnaism is corresponding adapters are available
This commit is contained in:
parent
18400049b3
commit
fa569284c3
2 changed files with 21 additions and 2 deletions
|
@ -23,6 +23,7 @@
|
||||||
<metal:fields define-macro="fields">
|
<metal:fields define-macro="fields">
|
||||||
<tal:define define="manageMode manageMode|view/manageMode|nothing;
|
<tal:define define="manageMode manageMode|view/manageMode|nothing;
|
||||||
fields view/fields;
|
fields view/fields;
|
||||||
|
instance view/instance;
|
||||||
data view/data;
|
data view/data;
|
||||||
state view/formState">
|
state view/formState">
|
||||||
<table style="width: 100%">
|
<table style="width: 100%">
|
||||||
|
@ -160,7 +161,8 @@
|
||||||
tal:attributes="name name;
|
tal:attributes="name name;
|
||||||
style python:
|
style python:
|
||||||
'width: %s' % (width and str(width)+'px' or '');">
|
'width: %s' % (width and str(width)+'px' or '');">
|
||||||
<option tal:repeat="item field/getVocabularyItems"
|
<option tal:repeat="item python:
|
||||||
|
field.getVocabularyItems(instance.context, request)"
|
||||||
tal:content="item/title"
|
tal:content="item/title"
|
||||||
tal:attributes="value item/token;
|
tal:attributes="value item/token;
|
||||||
selected python:
|
selected python:
|
||||||
|
|
|
@ -25,12 +25,14 @@ $Id$
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
from time import strptime, strftime
|
from time import strptime, strftime
|
||||||
|
from zope.app.form.browser.interfaces import ITerms
|
||||||
from zope.interface import implements
|
from zope.interface import implements
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
from zope.component import adapts
|
from zope.component import adapts
|
||||||
from zope import component
|
from zope import component
|
||||||
from zope.i18n.format import DateTimeParseError
|
from zope.i18n.format import DateTimeParseError
|
||||||
from zope.i18n.locales import locales
|
from zope.i18n.locales import locales
|
||||||
|
from zope.schema.interfaces import IVocabularyFactory
|
||||||
from zope.tales.engine import Engine
|
from zope.tales.engine import Engine
|
||||||
from zope.tales.tales import Context
|
from zope.tales.tales import Context
|
||||||
|
|
||||||
|
@ -129,14 +131,29 @@ class Field(Component):
|
||||||
def getTitleValue(self):
|
def getTitleValue(self):
|
||||||
return self.title or self.name
|
return self.title or self.name
|
||||||
|
|
||||||
def getVocabularyItems(self):
|
def getVocabularyItems(self, context=None, request=None):
|
||||||
voc = (self.vocabulary or '')
|
voc = (self.vocabulary or '')
|
||||||
if isinstance(voc, basestring):
|
if isinstance(voc, basestring):
|
||||||
|
terms = self.getVocabularyTerms(voc, context, request)
|
||||||
|
if terms is not None:
|
||||||
|
return terms
|
||||||
voc = voc.splitlines()
|
voc = voc.splitlines()
|
||||||
return [dict(token=t, title=t) for t in voc if t.strip()]
|
return [dict(token=t, title=t) for t in voc if t.strip()]
|
||||||
else:
|
else:
|
||||||
return [dict(token=t.token, title=t.title or t.value) for t in voc]
|
return [dict(token=t.token, title=t.title or t.value) for t in voc]
|
||||||
|
|
||||||
|
def getVocabularyTerms(self, name, context, request):
|
||||||
|
if context is None or request is None:
|
||||||
|
return None
|
||||||
|
source = component.queryUtility(IVocabularyFactory, name=name)
|
||||||
|
if source is not None:
|
||||||
|
source = source(context)
|
||||||
|
terms = component.queryMultiAdapter((source, request), ITerms)
|
||||||
|
if terms is not None:
|
||||||
|
termsList = [terms.getTerm(value) for value in source]
|
||||||
|
return [dict(token=t.token, title=t.title) for t in termsList]
|
||||||
|
return None
|
||||||
|
|
||||||
def getFieldTypeInfo(self):
|
def getFieldTypeInfo(self):
|
||||||
return self.fieldTypeInfo or fieldTypes.getTerm(self.fieldType)
|
return self.fieldTypeInfo or fieldTypes.getTerm(self.fieldType)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue