Grok-like directives for creating Dexterity content
Project 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
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Close
Hashes for plone.directives.dexterity-1.0b1.zip
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae6e02fdf6bcfe5d233a4db706f2fd257d611dfb94f7fc4e37dc8711cce3fb0b |
|
MD5 | 20475158adfffe8a4e9d4a1d07321fc9 |
|
BLAKE2b-256 | 79c8d6fe11b9e91726e21cd247756d842a7e8f308123e6bef3070bd414a2b8c9 |