Wallogit.com
2017 © Pedro Peláez
This is a package to show one way to implement an additional json view for Neos pages. The JSON view get rendered
by adding a .json to the url (instead of .html);, (*1)
1) composer install
2) Run neos: ./flow server:run
3) Access Site on http://127.0.0.1:8081
4) Run setup and create/import a page, (*2)
Attention! in your project roots Configuration/Routes.yaml has to be the definition to your subroutes., (*3)
#project root: Configuration/Routes.yaml
-
name: 'Neos Json Output'
uriPattern: '<CmSubRoutes>'
subRoutes:
'CmSubRoutes':
package: 'CM.Neos.JsonOutput'
If you want to see the output in JSON change the format .html to .json, (*4)
The root page can not be changed to json view so far, as you can't add .json to the url If you need a page with a complete tree, you could create a page and add a menu to the content, (*5)
Some (not all!) default Neos NodeTypes are added already (see Resources/Private/Fusion/Root.fusion) others have to be
added e.g. to your site package. Every NodeType which is used and should show up as a valid json representation has
to be declared., (*6)
A teaser NodeType which has the properties: title, image and text, (*7)
Root.fusion:, (*8)
prototype(Vendor.PackageName:TeaserJson) < prototype(CM.Neos.JsonOuput:JsonObject) {
title = ${q(node).property('title')}
imageUri = Neos.Neos:ImageUri {
asset = ${q(node).property('image')}
width = 100
height = 100
allowCropping = TRUE
allowUpScaling = TRUE
}
text = ${q(node).property('text')}
}
and added to the ContentCase for JSON also in `Root.fusion, (*9)
# Add every type you use to this Content Case list to get rendered as json
prototype(CM.Neos.JsonOuput:ContentCaseJson) < prototype(Neos.Fusion:Case) {
[...]
teaser {
condition = ${q(node).is('[instanceof CM.Neos.JsonOuput:Teaser]')}
type = ${'CM.Neos.JsonOuput:TeaserJson'}
}
headline {
condition = ${q(node).is('[instanceof Neos.NodeTypes:Headline]')}
type = ${'CM.Neos.JsonOuput:HeadlineJson'}
}
[...]
}
This approach is inspired by and based on Dimitri Pisarev solution, (*10)