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:
$type: jcrContentTypeDatasource
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 node type for storing an item of the given content type.
|
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. |