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.
EXT:headless version | TYPO3 support | PHP support | Status |
---|---|---|---|
>= 4.0 |
12 , 13 |
>= 8.1 |
Active development & support |
>= 3.0 |
11 |
>= 7.4, <= 8.2 |
Critical bugfixes only |
>= 2.0 |
9 , 10 |
>= 7.2, <=7.4 |
Critical bugfixes only |
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
Whether you are a developer, content manager, or a tech enthusiast, this tutorial is tailored to provide a comprehensive introduction to TYPO3 Headless, helping you to get started on your journey with confidence.
Since versions: 4.2
| 3.5
Flag headless
is required to configure in site configuration!
This flag instructs how EXT:headless
should behave in multisite instance.
For each site you can set in which mode site is operated (standard aka HTML response, headless, or mixed mode).
You can set headless
flag manually in yaml file or via site configuration in the backend:
'headless': 0|1|2
While the legacy flag (true
|false
) is still recognized, transitioning to the integer notation is recommended.
false
) = headless mode is deactivated for the site within the TYPO3 instance. Default value!true
) = headless mode is fully activated for the site within the TYPO3 instance.For a chosen site in TYPO3, follow these steps:
headless
flag to a value of 1
in the site configuration file or configure the flag via editor in the Site's management backend.headless
flag to a value of 2
in the site configuration file or configure the flag via editor in the Site's management backend.The mixed mode flag (value of 2
) instructs the EXT:headless extension to additionally check for the Accept
header with a value of application/json
when processing requests to the particular site in the TYPO3 instance.
Accept
header or Accept
has a different value than application/json
, TYPO3 will respond with HTML content (standard TYPO3's response).Accept
matches the value of application/json
, TYPO3 will respond with a JSON response.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.
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 processors for headless rendering purposes.
Used for fetching records from the database.
This processor should be used to process files (standard or media files).
Also, it allows you to process images. See docs chapter: Images for details.
Should be used along with FilesProcessor
(chained). Used for processing mutliple media files.
Used for navigation. Works just like standard menu processor.
Used for processing 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 the #initiative-headless-pwa Slack channel.
A special thanks goes to macopedia.com company, which is sponsoring development of this solution.