Package: infrae.plone.relations.form
ContentsInterface definitionWidget definitionForm definitionReal testChanges1.00.9CreditsThe purpose of this extension is to provide formlib widget to edit
plone.app.relation relations. This have been tested with Plone 2.5 and
Plone 3.Interface definitionSimple interface for our contents, using the custom Zope 3 field for
relation:>>> from infrae.plone.relations.schema import PloneRelation
>>> from zope.interface import implements, Interface
>>> class ISimpleContent(Interface):
...    """Simple interface with relation."""
...    relation = PloneRelation(title=u"A relation",
...                             relation="relation1")In the user interface, Zope IntID are used to keep track of
object. You can also use Archetype UID (check theconfigure.zcmlfile), in this case all content must comes from the Referenceable
class of Archetype (Products.Archetypes.Referenceable).Widget definitionThe plone relation widget is customisable, you can select different
sub-widgets to select new items to add to relation. These sub-widgets
can takes arguments. For instance here, you can put a restriction oncontent_type.The widget is built usingCustomWidgetFactory:>>> from infrae.plone.relations.form import PloneRelationEditWidget
>>> from infrae.plone.relations.form import PloneRelationSearchAddWidget
>>> from zope.app.form import CustomWidgetFactory
>>> widget_factory = CustomWidgetFactory(PloneRelationEditWidget,
...                                      add_widget=PloneRelationSearchAddWidget,
...                                      add_widget_args=dict(content_type='MySimpleContent'))Currently, there is three different widgets to add relations: one which
does a catalog search with user input and let select result as object
for relation, one which list objects (from the catalog always), one
which use a Zope 3 vocabulary as input.Theinfrae.plone.relations.form.utilityprovides simples methods to
build these widgets.Form definitionNow, we will do a simple edit form for a content using this interface:>>> from Products.Five.formlib import formbase
>>> from zope.formlib import form
>>> class EditSimpleContentForm(formbase.EditForm):
...    label = 'Edit form'
...    description = 'Form to edit relation'
...    form_fields = form.Fields(ISimpleContent)
...    form_fields['relation'].custom_widget = widget_factoryIt’s easy ?Real testWe added this code in theexample.pyfile, and the form would be
bind to Document. We load it now:>>> from Products.Five.zcml import load_string
>>> load_string("""<configure xmlns="http://namespaces.zope.org/browser">
... <page name="relation.html"
...       for="infrae.plone.relations.form.example.IPloneRelationExample"
...       class="infrae.plone.relations.form.example.PloneRelationEditForm"
...       permission="cmf.ModifyPortalContent" />
... </configure>""")And now get an authenticated browser:>>> browser = self.getAuthenticatedBrowser()The front-page is a document, so we should get our form:>>> browser.open('http://nohost/plone/front-page/relation.html')
>>> 'Plone relation edit form' in browser.contents
TrueSo we can search for Plone in this add widget, and should get one
response, since by default there is only one document with the wordPlone, the front page itself:>>> browser.getControl(name='form.relation.search_value').value='Plone'
>>> browser.getControl(name='form.relation.search_button').click()And we got some results:>>> add_value = browser.getControl(name='form.relation.add_value:list')
>>> add_value.getControl('Welcome to Plone').selected = True
>>> browser.getControl(name='form.relation.add_button').click()
>>> browser.getControl('Apply').click()
>>> 'Updated on' in browser.contents
TrueYou can look up theREADME.EXT.txtandexample.pyfile for
more tests and examples.Changes1.0Add more tests,Remove translation marker: they triggers errors under Plone 3. Now
this work with Plone 3 as well.0.9First release, we need more functional or unit test to release 1.0.CreditsThe first version of this widget have been released with the help of
the Flemish government of Belgium, for the application
<http://www.zonderisgezonder.be>.You can help us as well to contribute to this product, by sending your
remarks or patchs at the author email address (or ask for an SVN
access).