Using behaviors¶
Finding and adding behaviors
Dexterity introduces the concept of behaviors – re-usable bundles of functionality and/or form fields which can be turned on or off on a per-type basis.
Each behavior has a unique interface. When a behavior is
enabled on a type, you will be able to adapt that type to
the behavior’s interface. If the behavior is disabled, the
adaptation will fail. The behavior interface can also be
marked as an
IFormFieldsProvider
, in which case it will add fields to the standard add and
edit forms. Finally, a behavior may imply a sub-type: a
marker interface which will be dynamically provided by
instances of the type for which the behavior is enabled.
We will not cover writing new behaviors in this manual, but we will show how to enable behaviors on a type. Writing behaviors is covered in the Behaviors manual.
In fact, we’ve already seen one standard behavior applied to our example types, registered in the FTI and imported using GenericSetup:
<property name="behaviors">
<element value="plone.app.content.interfaces.INameFromTitle" />
</property>
Other behaviors are added in the same way, by listing
additional behavior interfaces as elements of the
behaviors
property.
Behaviors are normally registered with the
<plone:behavior
/>
ZCML directive. When registered, a behavior will create a
global utility providing
IBehavior
, which is used to provide some metadata, such as a title
and description for the behavior.
You can find and apply behaviors via the Dexterity Content Types control panel that is installed with plone.app.dexterity. For a list of standard behaviors that ship with Dexterity, see the reference at the end of this manual.