The content API will use the current domain / site of the request, so make sure to call the API via the correct domain when in a multi-site installation.
The API responses are declared by Fusion prototypes. This allows for a high degree of flexibility and customization.
This package does not offer a complex API for querying nodes. It is mainly focused on rendering pages backed by document nodes when using Neos as a headless CMS. It is also perfect to pair with @networkteam/zebra and supports full editing of nodes with visual editing.
A node can be fetched either by path (for public access) or by context path (for access with preview in workspaces).
- Support for multi-site installations
- Supports dimensions (e.g. for multi-language sites)
- Supports Flowpack.Neos.DimensionResolver for flexible dimension routing
- Supports Neos.RedirectHandler (if installed) and
checkRedirects
is enabled in settings
Networkteam:
Neos:
ContentApi:
recursiveReferencePropertyDepth: 1
documentList:
ignoredNodeTypes:
- 'Neos.Neos:Shortcut'
# Enable to check redirects of RedirectsHandler (if package is available) if a node is not found
checkRedirects: false
prototype(Neos.Demo:Document.Page.Api) < prototype(Networkteam.Neos.ContentApi:DefaultDocument) {
content {
main = Neos.Neos:ContentCollection {
nodePath = 'main'
}
teaser = Neos.Neos:ContentCollection {
nodePath = 'teaser'
}
}
}
prototype(Neos.Demo:Document.LandingPage.Api) < prototype(Neos.Demo:Document.Page.Api)
prototype(Neos.Demo:Document.Homepage.Api) < prototype(Neos.Demo:Document.Page.Api)
The idea here is to have a .Api
prototype for the complete document
node type hierarchy.
Content as well as arbitrary data can be added to the prototype and will be
serialized as JSON.
contentApi {
site {
# Set some additional context variables for default Fusion to work correctly
@context {
documentNode = ${site}
node = ${site}
}
navigation = Neos.Fusion:DataStructure {
mainItems = Neos.Fusion:Map {
items = ${q(site).children('[instanceof Neos.Neos:Document][_hiddenInIndex=false]')}
itemName = 'node'
itemRenderer = Neos.Fusion:DataStructure {
title = ${q(node).property('title')}
renderPath = Neos.Neos:NodeUri {
node = ${node}
format = 'html'
}
}
}
}
content {
footer = Neos.Neos:ContentCollection {
nodePath = 'footer'
}
}
}
}
This can be fetched via the /content-api/site
endpoint for the current site (depends on domain).
Lists available documents with route path / context path and iterating through dimensions.
A different workspace can be selected via workspaceName
(needs authentication).
Note: If Flowpack.Neos.DimensionResolver already resolved dimensions e.g. based on the domain, then the dimensions are not iterated.
Render a document given by path
or contextPath
.
Render a single node given by contextPath
.
Render site properties independent of a single node.