Added fields and keyword view

This commit is contained in:
David Convent 2013-01-24 10:21:09 +01:00
parent d5a8bf3e42
commit 145ccf90e2
12 changed files with 208 additions and 10 deletions

View File

@ -34,10 +34,20 @@ Résumé :
- champ ID
- champ Titre (dénomination du KW)
- champ Description (NH)
- champ (multi texte) EQ/UF
- champ Enfant (relation -> NT)
- champ RT (relation)
- champ NH
Relation parent/enfant :
Je choisis de placer la relation dans le sens suivant:
l'enfant stocke la relation 'parent' dans 1 de ses champs.
La raison est que lorsque l'on crée un nouvel objet, c'est souvent pour
l'ajouter à partir d'un point d'accroche existant (un parent).
Il est plus facil de stocker la relation dans l'objet créé que de
remonter à l'objet parent pour créer la nouvelle relation une fois
l'objet enfant lui-même créé.
Le widget

View File

@ -0,0 +1 @@
#

View File

@ -0,0 +1,25 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
xmlns:i18n="http://namespaces.zope.org/i18n"
i18n_domain="collective.dms.thesaurus">
<browser:resource
name="thesaurus_icon.png"
image="thesaurus_icon.png"
/>
<browser:resource
name="thesaurus_item_icon.png"
image="thesaurus_item_icon.png"
/>
<browser:page
for="collective.dms.thesaurus.dmskeyword.IDmsKeyword"
name="dmskeyword.view"
class="plone.dexterity.browser.view.DefaultView"
template="dmskeyword_view.pt"
permission="zope2.View"
/>
</configure>

View File

@ -0,0 +1,38 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
lang="en"
metal:use-macro="context/main_template/macros/master"
i18n:domain="plone.app.dexterity">
<body>
<metal:main fill-slot="content-core">
<metal:content-core define-macro="content-core">
<tal:block repeat="widget view/widgets/values">
<div class="field" tal:condition="python:widget.__name__ not in ('IBasic.title', 'IBasic.description', 'title', 'description',)">
<label tal:content="widget/label" />
<br />
<div tal:content="structure widget/render" />
</div>
</tal:block>
<fieldset tal:repeat="group view/groups"
tal:attributes="id python:''.join((group.prefix, 'groups.', group.__name__)).replace('.', '-')">
<legend tal:content="group/label" />
<div class="field" tal:repeat="widget group/widgets/values">
<label tal:content="widget/label" />
<br />
<div tal:content="structure widget/render" />
</div>
</fieldset>
Toto
</metal:content-core>
</metal:main>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 330 B

View File

@ -15,7 +15,8 @@
<include package="plone.app.dexterity" />
<include package="plone.supermodel" />
<include package="plone.app.relationfield" />
<include package="collective.dms.thesaurus" />
<include package="." />
<include package=".browser" />
<genericsetup:registerProfile
name="default"

View File

@ -1,22 +1,65 @@
#import datetime
#from zope import schema
from zope.interface import implements, implementer
#from zope.component import adapts
from zope.interface import implements
from zope.component import adapter
#from plone.dexterity.content import Container
from zope import schema
from zope.schema.interfaces import IList
from z3c.form.interfaces import IFormLayer, IFieldWidget, IMultiWidget
from z3c.form.widget import FieldWidget, MultiWidget
# #from plone.dexterity.content import Container
from plone.dexterity.schema import DexteritySchemaPolicy
from plone.dexterity.content import Item
from plone.supermodel import model
from . import _
from .relatedkeywords import RelatedThesaurusKeywords
#from plone.autoform import directives as form
#from plone.directives.form import default_value
class IEquivalences(IList):
""""""
class Equivalences(schema.List):
implements(IEquivalences)
def __init__(self, **kwargs):
schema.List.__init__(self, **kwargs)
@adapter(IEquivalences, IFormLayer)
@implementer(IFieldWidget)
def EquivalencesWidget(field, request):
return FieldWidget(field, MultiWidget(request))
class IDmsKeyword(model.Schema):
""" """
# XXX: Ungly widget that needs to be replaced
equivs = Equivalences(
title=u'EQs',
required=False,
value_type=schema.TextLine()
)
# BT: broader term
broader = RelatedThesaurusKeywords(
title=_(u"BT (Broader Terms)"),
required=False,
)
# RT: related term
related = RelatedThesaurusKeywords(
title=_(u"RT (Related Terms)"),
required=False,
)
class DmsKeyword(Item):
""" """
implements(IDmsKeyword)
@ -28,3 +71,4 @@ class DmsKeywordSchemaPolicy(DexteritySchemaPolicy):
def bases(self, schemaName, tree):
return (IDmsKeyword, )

View File

@ -3,24 +3,25 @@
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Keyword</property>
<property name="description" i18n:translate="">DMS Keyword</property>
<property name="icon_expr">string:${portal_url}/++resource++folder_icon.png</property>
<property name="icon_expr">string:${portal_url}/++resource++thesaurus_item_icon.png</property>
<property name="factory">dmskeyword</property>
<property name="add_view_expr">string:${folder_url}/++add++dmskeyword</property>
<property name="link_target"></property>
<property name="immediate_view">view</property>
<property name="global_allow">True</property>
<property name="global_allow">False</property>
<property name="filter_content_types">True</property>
<property name="allowed_content_types"/>
<property name="allow_discussion">False</property>
<property name="default_view">view</property>
<property name="default_view">@@dmskeyword.view</property>
<property name="view_methods">
<element value="view"/>
<element value="@@dmskeyword.view"/>
</property>
<property name="default_view_fallback">False</property>
<property name="add_permission">cmf.AddPortalContent</property>
<property name="klass">collective.dms.thesaurus.dmskeyword.DmsKeyword</property>
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle"/>
<!-- element value="plone.app.content.interfaces.INameFromTitle"/ -->
<element value="plone.app.dexterity.behaviors.metadata.IDublinCore"/>
<element value="collective.dexteritytextindexer.behavior.IDexterityTextIndexer" />
</property>

View File

@ -3,7 +3,7 @@
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Thesaurus</property>
<property name="description" i18n:translate="">DMS Thesaurus</property>
<property name="icon_expr">string:${portal_url}/++resource++folder_icon.png</property>
<property name="icon_expr">string:${portal_url}/++resource++thesaurus_icon.png</property>
<property name="factory">dmsthesaurus</property>
<property name="add_view_expr">string:${folder_url}/++add++dmsthesaurus</property>
<property name="link_target"></property>

View File

@ -0,0 +1,24 @@
<span id="" class=""
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"><tal:block
tal:repeat="value view/tuples"
><a class="selected-option"
href="#"
tal:content="python:value[1]"
tal:attributes="href python:value[0]"
/><tal:block condition="not:repeat/value/end">, </tal:block
></tal:block
></span>

View File

@ -0,0 +1,54 @@
from zope.interface import implements, implementer
from zope.component import adapter, getUtility
from zope.app.intid.interfaces import IIntIds
from zc.relation.interfaces import ICatalog
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 import ObjPathSourceBinder
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
class IRelatedThesaurusKeywords(IRelationList):
""""""
class RelatedThesaurusKeywordsWidget(MultiContentTreeWidget):
display_template = ViewPageTemplateFile('related-thesaurus-keywords-display.pt')
def __init__(self, display_backrefs, request):
self.display_backrefs = display_backrefs
super(RelatedThesaurusKeywordsWidget, self).__init__(request)
def get_url(self, v):
return v
def get_label(self, v):
term = self.terms.getTermByToken(v)
return term.title
def tuples(self):
refs = [(self.get_url(x), self.get_label(x)) for x in self.value]
return refs
@adapter(IRelatedThesaurusKeywords, IFormLayer)
@implementer(IFieldWidget)
def RelatedThesaurusKeywordsFieldWidget(field, request):
return FieldWidget(field, RelatedThesaurusKeywordsWidget(field.display_backrefs, request))
class RelatedThesaurusKeywords(RelationList):
implements(IRelatedThesaurusKeywords)
def __init__(self, **kwargs):
source_config = dict()
source_config['portal_type'] = ('dmskeyword',)
RelationList.__init__(self,
value_type=RelationChoice(
title=u'',
source=ObjPathSourceBinder(**source_config)),
**kwargs)