Metadata-Version: 1.0
Name: plone.directives.dexterity
Version: 1.0b1
Summary: Grok-like directives for creating Dexterity content
Home-page: http://code.google.com/p/dexterity
Author: Martin Aspeli
Author-email: optilude@gmail.com
License: LGPL
Description: ==========================
        plone.directives.dexterity
        ==========================
        
        This 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 classes
        ---------------
        
        Content 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 = details
        
        This 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.
        
        Forms
        -----
        
        To 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 to
        `plone.directives.form`_, and support custom template associations. Please
        note, however:
        
        * When using ``dexterity.AddForm`` as a base, you must use the ``grok.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 using ``dexterity.EditForm`` as a base, you must use ``grok.context()``
        and supply a Dexterity content type interface as an argument. This is to
        allow proper re-use of types.
        
        .. _plone.directives.form: http://pypi.python.org/pypi/plone.directives.form
        Changelog
        =========
        
        1.0b1 - 2010-08-05
        ------------------
        
        * Make sure custom add forms redirect to the correct place after creating
        content. Fixes http://code.google.com/p/dexterity/issues/detail?id=136
        [optilude]
        
        1.0a2 - 2009-11-17
        ------------------
        
        * Fix deprecation warnings on Zope 2.12
        [optilude]
        
        1.0a1 - 2009-07-25
        ------------------
        
        * Initial release
        
        
Keywords: grok plone dexterity content
Platform: UNKNOWN
Classifier: Framework :: Plone
Classifier: Programming Language :: Python
Classifier: Topic :: Software Development :: Libraries :: Python Modules
