Package: plone.directives.dexterity
plone.directives.dexterityThis package provides optional, Grok-like directives for configuring
Dexterity content. It depends on five.grok, which in turn depends on
the various re-usable grokcore.* packages, but not Grok itself.See also plone.directives.form, which provides directives for configuring
schema interfaces with form hints.Content classesContent extending the Dexterity ‘Item’ and ‘Container’ base classes can be
grokked in order to register a factory and/or ZMI add permission.For example:from plone.directives import dexterity
from plone.directives import form
from five import grok
from zope import schema

class IPage(form.Schema):

    title = schema.TextLine(title=u"Title")

    description = schema.Text(title=u"Description",
                          description=u"Summary of the body")

    body = schema.Text(title=u"Body text",
                       required=False,
                       default=u"Body text goes here")

    details = schema.Text(title=u"Details",
                          required=False)

class FSPage(dexterity.Item):
    grok.implements(IPage)
    grok.name('example.page')

    def __init__(self, id=None, title=None, description=None, body=None, details=None):
        self.id = id # required - or call super() with this argument
        self.title = title
        self.description = description
        self.body = body
        self.details = detailsThis will register a factory utility if one is not already present with
the name ‘example.fspage’.You can also use the ‘add_permission()’ directive to cause the type to be
registered as a Zope 2 content class, in the same way that the
<five:registerClass /> directive does:class ZopeTwoItem(dexterity.Item):
    grok.implements(IPage)
    dexterity.add_permission('cmf.AddPortalContent')
    portal_type = 'example.zopetwopage'However, for most content types, this will be unnecessary.FormsTo create a Dexterity add-, edit- or display form for your type, use the
AddForm, EditForm or DisplayForm base classes. For example:from plone.directives import dexterity
from plone.directives import form
from five import grok
from zope import schema

class IPage(form.Schema):

    title = schema.TextLine(title=u"Title")

    description = schema.Text(title=u"Description",
                          description=u"Summary of the body")

    body = schema.Text(title=u"Body text",
                       required=False,
                       default=u"Body text goes here")

    details = schema.Text(title=u"Details",
                          required=False)

class View(dexterity.DisplayForm):
    """The view. May will a template from <modulename>_templates/view.pt,
    and will be called 'view' unless otherwise stated.
    """
    grok.require('zope2.View')
    grok.context(IPage)

class Edit(dexterity.EditForm):
    """A standard edit form.
    """
    grok.context(IPage)

    def updateWidgets(self):
        super(Edit, self).updateWidgets()
        self.widgets['title'].mode = 'hidden'These forms are grokked in a manner that is similar toplone.directives.form, and support custom template associations. Please
note, however:When usingdexterity.AddFormas a base, you must use thegrok.name()directive to give the name of the add view. Usually, this is the same as
the name of the Factory Type Information object.When usingdexterity.EditFormas a base, you must usegrok.context()and supply a Dexterity content type interface as an argument. This is to
allow proper re-use of types.Changelog1.0.2 - 2011-09-25Fix super() call inplone.directives.dexterity.AddForm[davisagli]1.0.1 - 2011-09-24Honor theplone.directives.form.wrapdirective on add forms.
They remain wrapped by default for backwards-compatibility with custom
templates.
This closeshttp://code.google.com/p/dexterity/issues/detail?id=184[davisagli]1.0 - 2011-05-20Fix reST.
[davisagli]1.0b1 - 2010-08-05Make sure custom add forms redirect to the correct place after creating
content. Fixeshttp://code.google.com/p/dexterity/issues/detail?id=136[optilude]1.0a2 - 2009-11-17Fix deprecation warnings on Zope 2.12
[optilude]1.0a1 - 2009-07-25Initial release