Stars: 131
Forks: 40
Pull Requests: 371
Issues: 156
Watchers: 14
Last Updated: 2022-12-13 20:23:29
TYPO3 JSON API providing content for PWA application
License: GNU General Public License v2.0
Languages: PHP, TypeScript, HTML
headless
- JSON Content API for TYPO3 Headless solutionHeadless allows you to render JSON from TYPO3 content. You can customize output by changing types, names and nesting of fields.
This extension provides backend part (JSON API) for TYPO3 PWA solution. Second part is a JavaScript application nuxt-typo3 which consumes JSON API and renders the content using Vue.js and Nuxt. See frontend documentation here: https://typo3-headless.github.io/nuxt-typo3/
If you have any questions just drop a line in #initiative-headless-pwa Slack channel.
With the release of TYPO3 v11.5 LTS we have to move support for TYPO3 v9 and v10 to another branch as changes between those two versions are incompatible. Version 3.x and master branch will support TYPO3 v11, and headless version 2.x keep support for v9 and v10.
PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | |
---|---|---|---|---|
TYPO3 v9.5 | no | no | no | no |
TYPO3 v10.4 | no | no | no | no |
TYPO3 v11.5 | no | no | yes | yes |
PHP 7.2 | PHP 7.3 | PHP 7.4 | PHP 8.0 | |
---|---|---|---|---|
TYPO3 v9.5 | yes | yes | yes | no |
TYPO3 v10.4 | yes | yes | yes | no |
TYPO3 v11.5 | no | no | no | no |
If you want to take a look at working demo including frontend, backend and demo data, use our DDEV based demo project here: https://github.com/TYPO3-Initiatives/pwa-demo
Install extension using composer
composer require friendsoftypo3/headless
Then, you should include extension typoscript template, and you are ready to go. Also, please remember to don't use fluid styled content on the same page tree together with ext:headless.
In headless extension we implemented new JSON Content Object, which allows you to specify what fields you want to output, and how they will look. First, let's take a look at simple example
lib.page = JSON
lib.page {
fields {
header = TEXT
header {
field = header
}
}
}
Output
{
"header" : "headerFieldValue"
}
in addition, keyword fields
allow you to nest multiple times fields in json, e.g.
lib.page = JSON
lib.page {
fields {
data {
fields {
foo = TEXT
foo {
field = bar
}
foo1 = TEXT
foo1 {
field = bar1
}
}
}
}
}
Output
{
"data": [
{
"foo": "bar",
"foo1": "bar1"
}
]
}
We introduce new simple content objects to improve JSON API response for frontend developers. We can set correct property types, so frontend does not have to deal with string values for fields with numeric values or field that should be true/false.
lib.page = JSON
lib.page {
fields {
data {
fields {
foo = INT
foo {
# db value of foo_field = 1
field = foo_field
}
bar = BOOL
bar {
# db value of bar_field = 0
field = bar_field
}
}
}
}
}
Output
{
"data": [
{
"foo": 1,
"bar": false
}
]
}
You can override every field in output using typoscript. This extension allows you to use standard typoscript objects such as TEXT, COA, CASE.
n headless v3.0 we introduce a new, smaller, faster and more flat page response. If you want to keep compatibility with your frontend application, you can load a deprecated typoscript template for version 2.x and keep the old structure of the response running.
You can use Data Processors just like in FLUIDTEMPLATE
Content Object, e.g.
lib.languages = JSON
lib.languages {
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
10 {
languages = auto
as = languages
}
}
}
We provide multiple data processorors for headless usage
This processor should be used to process files (standard or media files). Also, it allows you to proccess images.
Should be used along with FilesProcessor
(chained). Used for processing mutliple
media files.
Used for navigation. Works just like standard menu processor.
Used for proecessing flexforms.
Render your all headless sites configuration for your frontend application.
Development for this extension is happening as part of the TYPO3 PWA initiative, see https://typo3.org/community/teams/typo3-development/initiatives/pwa/ If you have any questions, join #initiative-pwa Slack channel.
A special thanks goes to macopedia.com company, which is sponsoring development of this solution.