Content type Model definition
A model definition, a subitem of the Magnolia Content type definition, defines the model of a content type. The model describes the properties of a content item such as name, description, asset, birthday, and so on.
In the default JCR-based implementation, the type of the properties can be String
, Boolean
, Decimal
, Double
, Long
, Date
, asset
, richText
, another content type or a submodel. The model can define a list of submodel definitions.
Model definition properties
When designing a model don’t think about it in terms of UI elements like fields. Think in terms of what type of data the field stores. For example, a link
field. stores a String
type (i.e., property
). The property in the model definition can be decorated in the app definition with whatever UI element stores that data type.
datasource:
workspace: tourguides
namespaces:
mt: https://www.magnolia-travel.com/jcr/1.0/mt
autoCreate: true
model:
nodeType: mt:tourGuide
properties:
- name: birthday
type: Date (1)
- name: gender
- name: shortBio
- name: contact
type: contactData
subModels:
- name: contactData
properties:
- name: email
- name: phoneNumber
- name: addresses
type: address
multiple: true
- name: address
properties:
- name: street
- name: city
- name: postalCode
- name: country
1 | Here, the type set is Date . |
Property | Description | ||
---|---|---|---|
|
required A list of property definition objects. |
||
|
A subdefinition item defining one property of the model. Its definition interface is info.magnolia.types.model.PropertyDefinition.
|
||
|
optional A list of submodel definition objects. |
||
|
A subdefinition item configuring a complete submodel. Its definition interface is info.magnolia.types.model.SubModelDefinition.
|
||
|
optional The name of the JCR node type for storing an item of the given content type. If the given node type has not been registered yet, the system automatically registers a new node type by the given name. The type generated inherits from the Magnolia
|
Property definition properties
This section describes the PropertyDefinition
item. Property definition items can be defined in the properties
property, which is a property of the model definition of a content type definition.
Property | Description | ||
---|---|---|---|
|
required The name of the property. The name is used for storing values in the underlying data source. |
||
|
optional, default is Possible values:
|
||
|
optional, default is Makes the property mandatory. |
||
|
optional, default is Enables i18n support for the property.
|
||
|
optional, default is The |
||
|
optional Defines a parent node for a list of selectable options
Further customization such as using an alternative control, for example a radio button group, is possible by overriding the class or the
|
||
|
required Value saved to the repository when selected. |
||
|
optional Option label displayed to the user. |
Submodels
Use submodels to define complex content types.
Submodels are useful whenever you need a group of fields more than once. A content type model definition can contain a list of submodel definitions within the subModels
property. Submodels can be used only within the content type where they have been defined.
A submodel definition has the same properties as a model, but a submodel cannot have additional submodels. The default |
Referencing content types
Projects often have multiple content types, and those types can reference each other. For example you could have a Book type and a Publisher type. The Book could have a reference to the Publisher type. Then in Magnolia authors can manage publishers in one app, and books in another app. The form for the Book app will include a control to select a Publisher for that app. This common use-case is easy to configure in the content type.
type: reference:bookType (1)
1 | Prepending reference: allows you to reference another content item. |
Interfaces and classes
Model
The base interface is info.magnolia.types.model.ModelDefinition.
Magnolia provides the info.magnolia.types.datasource.jcr.JcrDataSourceDefinition interface and the info.magnolia.types.model.jcr.ConfiguredJcrModelDefinition implementation class to specify the model to be mapped to a JCR node.
For info.magnolia.types.model.ModelDefinition, info.magnolia.types.model.jcr.ConfiguredJcrModelDefinition is set as the default implementation class via type mapping on the XML-based module descriptor of the magnolia-content-types
module.
By default, Magnolia expects you to configure properties for info.magnolia.types.model.jcr.JcrModelDefinition to define a model. |
Submodel
The submodel item is defined by the info.magnolia.types.model.SubModelDefinition interface, which extends info.magnolia.types.model.ModelDefinition. The default implementation is info.magnolia.types.model.jcr.ConfiguredJcrSubModelDefinition.
By default, Magnolia expects you to configure properties for info.magnolia.types.model.jcr.ConfiguredJcrSubModelDefinition to define a submodel.