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 typeset isDate. | 
| 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. | 
