Added field for thesaurus keywords. That field will be used content types schema (like in dms document)
This commit is contained in:
parent
33dbb3ca03
commit
5726e6be16
|
@ -24,6 +24,7 @@
|
|||
<adapter factory=".relatedkeywords.RelatedThesaurusKeywordsFieldWidget" />
|
||||
<adapter factory=".broaderkeywords.BroaderThesaurusKeywordsFieldWidget" />
|
||||
<adapter factory=".equivalences.ThesaurusKeywordEquivalencesFieldWidget" />
|
||||
<adapter factory=".field.ThesaurusKeywordsFieldWidget" />
|
||||
|
||||
<adapter
|
||||
name="SearchableText"
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
from zope.interface import implements, implementer
|
||||
from zope.component import adapter
|
||||
|
||||
from z3c.form.interfaces import IFormLayer, IFieldWidget
|
||||
from z3c.form.widget import FieldWidget
|
||||
from z3c.relationfield.interfaces import IRelationList
|
||||
from z3c.relationfield.schema import RelationChoice, RelationList
|
||||
|
||||
from plone.formwidget.contenttree.widget import MultiContentTreeWidget
|
||||
from plone.formwidget.contenttree.utils import closest_content
|
||||
from plone.formwidget.contenttree import ObjPathSourceBinder
|
||||
|
||||
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
|
||||
|
||||
class IThesaurusKeywords(IRelationList):
|
||||
""""""
|
||||
|
||||
class ThesaurusKeywordsWidget(MultiContentTreeWidget):
|
||||
display_template = ViewPageTemplateFile('thesaurus-keywords-display.pt')
|
||||
|
||||
def __init__(self, request):
|
||||
super(ThesaurusKeywordsWidget, self).__init__(request)
|
||||
|
||||
def terms(self):
|
||||
return [ x for x in self.value ]
|
||||
|
||||
|
||||
@adapter(IThesaurusKeywords, IFormLayer)
|
||||
@implementer(IFieldWidget)
|
||||
def ThesaurusKeywordsFieldWidget(field, request):
|
||||
return FieldWidget(field, ThesaurusKeywordsWidget(request))
|
||||
|
||||
class ThesaurusPathSourceBinder(ObjPathSourceBinder):
|
||||
|
||||
def __call__(self, context):
|
||||
selectable_filter = self.selectable_filter
|
||||
selectable_filter.criteria['portal_type'] = ('dmskeyword',)
|
||||
#thesaurus_path = {'query': '/'.join(context.getPhysicalPath()[:-1])}
|
||||
#selectable_filter.criteria['path'] = thesaurus_path
|
||||
return self.path_source(
|
||||
closest_content(context),
|
||||
selectable_filter=selectable_filter,
|
||||
navigation_tree_query=self.navigation_tree_query)
|
||||
|
||||
|
||||
class ThesaurusKeywords(RelationList):
|
||||
implements(IThesaurusKeywords)
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
RelationList.__init__(self,
|
||||
value_type=RelationChoice(
|
||||
title=u'',
|
||||
source=ThesaurusPathSourceBinder()),
|
||||
**kwargs)
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
<ul id="" class=""
|
||||
tal:condition="view/terms"
|
||||
tal:attributes="id view/id;
|
||||
class view/klass;
|
||||
style view/style;
|
||||
title view/title;
|
||||
lang view/lang;
|
||||
onclick view/onclick;
|
||||
ondblclick view/ondblclick;
|
||||
onmousedown view/onmousedown;
|
||||
onmouseup view/onmouseup;
|
||||
onmouseover view/onmouseover;
|
||||
onmousemove view/onmousemove;
|
||||
onmouseout view/onmouseout;
|
||||
onkeypress view/onkeypress;
|
||||
onkeydown view/onkeydown;
|
||||
onkeyup view/onkeyup"><li
|
||||
tal:repeat="item view/terms"
|
||||
><span tal:replace="item/title" /></li></ul
|
||||
><em tal:condition="not:view/value">(nothing)</em>
|
Reference in New Issue