# array
An array field has its own schema, and allows the user to create one or more objects that have the fields in that schema. These objects are stored as an array.
This is useful for collections that clearly belong to a parent object, such as multiple email addresses for a business or tabs in a widget, and do not have any other relationships to other objects.
If the objects in the array are also related to other doc types, such as pieces or pages, you should be using joins instead.
# Example 1
{
name: 'homes',
label: 'Homes',
type: 'array',
titleField: 'address',
schema: [
{
type: 'string',
name: 'address',
label: 'Address'
},
{
type: 'string',
name: 'zip',
label: 'Zip'
},
]
}
If titleField is not enough for your purposes, you can completely customize the output of the titles by setting titleField to the name of a custom Nunjucks template. All your template has to do is output whatever it wants, based on the item variable provided to it.
This template will be loaded from the apostrophe-schemas module, at project level (lib/modules/apostrophe/schemas/views/your-template-name.html at project level).
# Example 2: Cross module includes
If you would rather the template came from your own module, use "cross-module include" syntax, like this:
// app.js
// ... where you configure your modules ...
modules: {
products: {},
// other modules...
}
// lib/modules/products/index.js
module.exports = {
extend: 'apostrophe-pieces',
name: 'product',
addFields: [
{
type: 'array',
name: 'features',
listItemTemplate: 'products:listItem.html',
schema: [
{
type: 'singleton',
name: 'description',
widgetType: 'apostrophe-rich-text',
required: true
}
]
}
]
}
{# lib/modules/products/views/listItem.html #}
<div>{{ apos.areas.richText(item.description) }}</div>
# Settings
| Property | Type | Default | Description |
|---|---|---|---|
| name | string | Sets the name of the field in the database | |
| label | string | Sets the label of the field that the user sees | |
| required | boolean | false | If true, the field is mandatory |
| contextual | boolean | false | If true, it will prevent the field from appearing in a dialog box |
| type | string | Specifies the field type | |
| readOnly | boolean | false | If true, prevents the user from editing the field |
| help | string | Help text for the field that will appear with the field's label | |
| htmlHelp | string | Help text with support for HTML markup | |
| limit | int | The maximum number of entries in the array | |
| schema | schema | The set of fields present for each object | |
| titleField | string | If provided, the editing interface will use the value of that field as a distinguishing label for each entry in the array. Uses "dot notation" to access a nested property just as you would with MongoDB. | |
| listItemTemplate | template name | Enter the name of a nunjucks template to customize title output for each value in the array |
TIP
Notes on titlefield:
If there is no
titleFieldsetting, the items are numbered.Setting
titleFieldis recommended to improve clarity for content editors.titleFieldcan access joins beginning with Apostrophe 2.50.0, which is especially useful with dot notation.
← area attachment →