Welcome to my TYPO3 feature release series for TYPO3 v13! This blog is your gateway to detailed insights on significant features, breaking changes, and deprecations in TYPO3 version 13.2. Prepare to explore TYPO3 version 13.2, where editors receive a substantial boost with impressive improvements, and thrilling enhancements await beneath the surface. Get set to ride the wave of innovation with this new version. Keep reading to stay updated!
Yesterday, the TYPO3 community rejoiced as TYPO3 v13.2, the fourth sprint feature release, hit the scene. This release marks a pivotal stride towards the eagerly anticipated LTS edition set for October 2024. These updates in TYPO3 aim to streamline workflows, enhance user experiences, and provide robust tools for building and managing web projects effectively. Packed with robust features catered for–
TYPO3 Integrators:
TYPO3 introduces new ViewHelpers, facilitates RecordTransformation, optimizes FileVersionNumber handling, offers Fluid Schema generation, and adds custom attributes to TagBasedViewHelpers, enhancing template flexibility.
TYPO3 Editors:
Exciting backend updates empower TYPO3 editors with enhanced Live Search functionality, improved backend module navigation & workspace management, sortable and cloneable Forms, simplified record and file metadata editing via the "Edit selected columns" button, and convenient presets for downloading records.
TYPO3 Developers:
TYPO3 developers benefit from the new Schema API for unified TCA access, significant improvements in the Reference index, support for PSR-7 requests in Extbase validators, and customizable translations for Extbase Validators, enhancing validation capabilities.
TYPO3 Administrators:
TYPO3 administrators can now manage PHP's native disable_functions directly from the Install Tool, ensuring security and stability with no disruptive changes leading up to the LTS version.
But before we dive into the nitty-gritty, let's raise a toast to all the techies and non-techie heroes behind TYPO3's success. This blog is dedicated to your unwavering dedication! #T3Kudos
Don’t Miss To Read
Curious about TYPO3 v13's journey and the evolution from the roadmap to v13.0/1? Don't miss out—check out my comprehensive blog below for an insider's look.
Goals of TYPO3 v13 LTS
Before starting, look at the major goals of TYPO3 v13 LTS (long-term support).
Version | Primary Focus | Estimated Release |
13.0 | Breaking changes and new system requirements | Released: 2024-01-30 |
13.1 | Reusable components for creating new sites | Estimated: 2024-04-23 |
13.2 | Content blocks and new APIs for integrations | Estimated: 2024-07-02 |
13.3 | Feature freeze | Estimated: 2024-09-17 |
13.4 | LTS-release | Estimated: 2024-10-15 |
Why is TYPO3 13.2 Called “Ready. Set. Ride.” in Ocean Theme?
TYPO3 v13 is all about making life easier for backend editors and integrators. TYPO3 v13.2 focuses on upgrading the user interface (UI) to be more modern, intuitive, and packed with features, aiming to simplify editing tasks. With enhancements across the backend, TYPO3 v13.2 aims to streamline workflows for editors, making their work smoother and more enjoyable.
Under the slogan "Ready. Set. Ride.," TYPO3 v13.2 invites editors to embark on a journey through a more empowered TYPO3 CMS experience.
Clear All Button at Notifications
Now, you can clear all notifications in one go with the new "Clear All" button, displayed when there are two or more notifications in the lower right corner.
Additionally, if the notification container height exceeds the viewport, a scroll bar appears, allowing easy navigation through your notifications.
Backend Modules in Global Live Search
The backend LiveSearch now empowers users by listing accessible backend modules, providing a convenient alternative for navigating different parts of the backend. Click on Search icon (at top right corner) > Choose Backend modules.
Administrator Can Manage PHP’s disable_function
Introducing a new configuration option in the Install Tool, allowing you to customize the environment check with a list of approved `disable_functions`. Tailor your setup effortlessly to meet your specific requirements.
// Method 1: via Install Tool
Go to Admin Tools > Settings > Configure Installation-Wide Options > Search “allowedPhpDisableFunctions”.
// Method 2: config.settings.php or additional.php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['allowedPhpDisableFunctions']
= ['set_time_limit', 'set_file_buffer'];
Set Default Listing Resources ViewMode
In the TYPO3 Backend, such as the File > Filelist module, you can now switch between list and tile views for resource listings. By default, TYPO3 shows tiles unless a user preference has been set. Customize your resource display mode effortlessly to suit your workflow!
// Want to set the default Resources ViewMode? Integrators can now define this via User TSconfig:
// EXT:site_package/Configuration/user.tsconfig
options.defaultResourcesViewMode = list
Forms Get Sorting & Duplicate Form Features
TYPO3 users now have two exciting new features in the Form backend module. You can easily sort columns like Form Name, Locations, and Reference. Plus, the new duplicate form feature lets you clone any form with a single click, making form management smoother than ever.
"Access" Module Renamed to "Permissions"
This renaming accurately reflects the module's purpose and enhances consistency within the TYPO3 backend environment. This update simplifies navigation and clarifies the module's role in managing permissions effectively across TYPO3 instances.
Introduce Edit Columns at List Module
TYPO3 Editor gots small but impactful feature called “Edit Columns”. Go to List > Choose your page > Checkbox the record > Click on “Edit columns” button.
Introduce Edit-Specific Metadata at Filelist Module
Similarly, the TYPO3 Editor can easily edit selected columns at the Filelist module. Go to Filelist > Choose your folder > Checkbox the files > Click on the “Edit specific metadata” button.
Configure Preset to Export & Download Data
Editors can now effortlessly export data using predefined presets tailored to their needs by the website maintainer or TYPO3 extension developers. No more repetitive column selection—simply choose from a list of presets managed by the website maintainer for a streamlined export experience.
via PageTS Config
// EXT:site_package/Configuration/page.tsconfig
mod.web_list.downloadPresets {
pages {
10 {
label = Quick overview
columns = uid, title, crdate, slug
}
20 {
identifier = LLL:EXT:site_package/Resources/Private/Language/locallang.xlf:preset2.label
label = UID and titles only
columns = uid, title
}
}
}
via UserTS Config
// EXT:site_package/Configuration/user.tsconfig
page.mod.web_list.downloadPresets {
pages {
10 {
label = Quick overview (customized)
columns = uid, title, crdate, slug
}
30 {
label = Short with URL
columns = uid, title, slug
}
}
}
Workspace In Global Live Search
The backend LiveSearch now lists workspaces accessible to users, enabling quick switches outside the Workspaces module.
With proper permissions, users can also jump straight to the workspace's edit interface for configuration, making workspace management faster and more convenient than ever.
Click on Search icon (at top right corner) > Choose Backend modules.
Get Edit Record at “Check Links” Backend Module
A new button has been added to the Check Links backend module, enabling users to directly edit the full record of a broken link with ease.
Protect TCA Structures with New Schema API
Introducing the new Schema API, which provides unified access to all TCA structures in TYPO3.
This architectural update aims to minimize direct access to $GLOBALS['TCA'] post-Bootstrap. While existing methods like reading and writing $GLOBALS['TCA'] in Configuration/TCA/* and via TCA Overrides remain unchanged, the API offers a unified approach for accessing TCA information.
Use the Schema API to effortlessly retrieve details about TCA fields.
public function __construct(
protected readonly PageRepository $pageRepository,
protected readonly TcaSchemaFactory $tcaSchemaFactory
) {
}
public function myMethod(string $tableName): void {
if (!$this->tcaSchemaFactory->has($tableName)) {
// this table is not managed via TYPO3's TCA API
return;
}
$schema = $this->tcaSchemaFactory->get($tableName);
// Find out if a table is localizable
if ($schema->isLocalizable()) {
// do something
}
// Find all registered types
$types = $schema->getSubSchemata();
}
Now, developers can use the API to efficiently retrieve details about TCA fields, enhancing processes such as evaluating column overrides, foreign field structures, FlexForm schema parsing, and type field evaluations for database fields.
Important Update: Reference Index Rebuild Required
In TYPO3 v13, several new columns have been added to the sys_refindex table, necessitating a rebuild of this table during upgrades. It's crucial for all instances to update the reference index to ensure accurate data handling in both frontend and backend operations.
The reference index plays a vital role in TYPO3 v13, particularly for enhancing structural performance in the frontend. Keeping this index up-to-date after deployments is now mandatory to prevent data inconsistencies.
To optimize this process, TYPO3 v13 has streamlined the update operation, making full updates significantly quicker compared to previous versions. The recommended method to rebuild and fully update the reference index is using the CLI command:
// Option 1: via CLI: Keep always run while deploying your extensions
bin/typo3 referenceindex:update
// Option 2: via "DB check" module of the "typo3/cms-lowlevel" extension in the backend can also update the reference index.
Meet “record-transformation” Data Processor
Introducing a new TypoScript data processor for FLUIDTEMPLATE and PAGEVIEW! The record-transformation Data Processor is designed to complement the DatabaseQuery Data Processor seamlessly.
Usage in TypoScript
page = PAGE
page {
10 = PAGEVIEW
10 {
paths.10 = EXT:site_package/Resources/Private/Templates/
dataProcessing {
10 = database-query
10 {
as = mainContent
table = tt_content
select.where = colPos=0
dataProcessing.10 = record-transformation
}
}
}
}
Usage in Fluid Template
<!-- Any property, which is available in the Record (like normal) -->
{record.title}
{record.uid}
{record.pid}
<!-- Language related properties -->
{record.languageId}
{record.languageInfo.translationParent}
{record.languageInfo.translationSource}
<!-- The overlaid uid -->
{record.overlaidUid}
<!-- Types are a combination of the table name and the Content Type name. -->
<!-- Example for table "tt_content" and CType "textpic": -->
<!-- "tt_content" (this is basically the table name) -->
{record.mainType}
<!-- "textpic" (this is the CType) -->
{record.recordType}
<!-- "tt_content.textpic" (Combination of mainType and record type, separated by a dot) -->
{record.fullType}
Default Record Search Level Configuration
In TYPO3, when searching for records in the Web > List module or the database browser, you can specify which page tree levels to include in the search. Now, you can set a default search level using the new page TSconfig option mod.web_list.searchLevel.default.
This setting simplifies and streamlines the record search process, ensuring searches respect the specified page tree levels by default.
// EXT:my_sitepackage/Configuration/page.tsconfig
// Set the default search level to "infinite levels"
mod.web_list.searchLevel.default = -1
Additional “identifier” Property in Backend Layout
In TYPO3 v13, we've expanded the capabilities of Backend Layouts to include additional properties for columns. This enhancement allows TYPO3 integrators to reduce their TypoScript efforts when rendering content on pages.
The DataProcessor now retrieves all content elements from specified columns within a selected Backend Layout, making resolved record objects accessible in Fluid Templates via {content."myIdentifier".records}.
Here's an example of an enriched Backend Layout definition:
// EXT:my_sitepackage/Configuration/page.tsconfig
mod.web_layout.BackendLayouts {
default {
title = Default
config {
backend_layout {
colCount = 1
rowCount = 1
rows {
1 {
columns {
1 {
name = Main Content Area
colPos = 0
identifier = main
slideMode = slide
}
}
}
}
}
}
}
}
And here's how you can output it in the frontend:
page = PAGE
page.10 = PAGEVIEW
page.10.paths.10 = EXT:my_site_package/Tests/Resources/Private/Templates/
page.10.dataProcessing.10 = page-content
page.10.dataProcessing.10.as = myContent
<main>
<f:for each="{myContent.main.records}" as="record">
<h4>{record.header}</h4>
</f:for>
</main>
Introducing the New ViewHelper <f:feature />
Feature flags can now be checked from within Fluid templates. Feature flags can now be verified within Fluid templates. The <f:feature> ViewHelper enables integrators to check feature flags in Fluid templates. It follows TYPO3 API rules, treating undefined flags as false.
<!-- Basic usage -->
<f:feature name="myFeatureFlag">
This is being shown if the flag is enabled
</f:feature>
<!-- Nested Condition: feature / then / else -->
<f:feature name="myFeatureFlag">
<f:then>
Flag is enabled
</f:then>
<f:else>
Flag is undefined or not enabled
</f:else>
</f:feature>
Introducing New ViewHelper <f:constant />
A <f:constant> ViewHelper has been included for accessing PHP constants within Fluid templates:
{f:constant(name: 'PHP_INT_MAX')}
{f:constant(name: '\Vendor\Package\Class::CONSTANT')}
{f:constant(name: '\Vendor\Package\Enum::CASE')}
Command to Generate Fluid Schema Files
To enable autocompletion for all available ViewHelpers in supported IDEs, execute the following CLI command in your local development environment:
Firt
// CLI Commands to Generate Schema
vendor/bin/typo3 fluid:schema:generate
This command generates schema files that provide comprehensive ViewHelper information, enhancing development efficiency and accuracy.
<html
xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
xmlns:my="http://typo3.org/ns/Vendor/MyPackage/ViewHelpers"
data-namespace-typo3-fluid="true"
>
Default Value Change for Twitter Card Field
In TYPO3, the default value for the twitter_card field on a page has been adjusted. It now defaults to an empty string instead of "summary". The <meta name="twitter:card"> tag is rendered only if one of the following fields is filled:
- twitter_title
- twitter_description
- twitter_image
- twitter_card
- og_title
- og_description
- og_image
If none of these fields are filled and no specific twitter card is selected, the fallback value will be "summary".
Database Error "Row Size Too Large" in MySQL and MariaDB
In MySQL and MariaDB database engines, modifying the schema of tables with a large number of columns may sometimes trigger a "Row size too large" error.
TYPO3 core version 13 has implemented proactive measures to handle this issue in most cases. As a result, instance maintainers generally do not need to delve into the specific technicalities outlined below.
For more information on how TYPO3 addresses this challenge, visit: TYPO3 Documentation
Simplify parseFunc allowTags and denyTags optional
Simplified TypoScript HTML Processing with parseFunc. In TYPO3, defining TypoScript properties like allowTags or denyTags for HTML processing via stdWrap.parseFunc is now optional.
You can now use `allowTags = *` to allow all tags, making the rendering instructions more straightforward. Security considerations are handled automatically by the HTML sanitizer, unless htmlSanitize is explicitly disabled.
Practical Examples:
// 1. Allow any tag except `<u>`, which will be encoded:
10 = TEXT
10.value = <p><em>Example</em> <u>underlined</u> text</p>
10.parseFunc = 1
10.parseFunc {
allowTags = *
denyTags = u
}
// 2. Only allow `<u>` and encode any other tags:
10 = TEXT
10.value = <p><em>Example</em> <u>underlined</u> text</p>
10.parseFunc = 1
10.parseFunc {
allowTags = u
}
// 3. Allow all tags, with `allowTags = *` overriding `denyTags = *`:
10 = TEXT
10.value = <p><em>Example</em> <u>underlined</u> text</p>
10.parseFunc = 1
10.parseFunc {
allowTags = *
denyTags = *
}
Streamline FE/versionNumberInFilename to 'EXT:' resources
Currently, local resources in TYPO3 lack cache-busting, meaning they do not include a version in their URL. TypoScript traditionally has no built-in method to add cache-busting, requiring a new filename when replacing resources, which can feel cumbersome.
getText "asset" to cache-bust assets in TypoScript
// EXT:site_package/Configuration/TypoScript/setup.typoscript
page.20 = TEXT
page.20 {
value = { asset : EXT:core/Resources/Public/Icons/Extension.svg }
insertData = 1
}
// Result
typo3/sysext/core/Resources/Public/Icons/Extension.svg?1709051481
Cache-busted assets with the <f:uri.resource> ViewHelper
// EXT:site_package/Resources/Private/Template/MyTemplate.html
<f:uri.resource path="EXT:core/Resources/Public/Icons/Extension.svg" useCacheBusting="true" />
// Comparison
Before: typo3/sysext/core/Resources/Public/Icons/Extension.svg
Now: typo3/sysext/core/Resources/Public/Icons/Extension.svg?1709051481
The useCacheBusting argument in the ViewHelper is enabled by default, adjusting based on $GLOBALS['TYPO3_CONF_VARS']['FE']['versionNumberInFilename'].
This enhancement improves caching efficiency and ensures TYPO3 resources remain up-to-date with minimal manual intervention.
Custom Attribute to Tag Based ViewHelpers
TagBasedViewHelpers like <f:image /> or <f:form.*> now support adding custom attributes to HTML tags. Previously, only a limited set of attributes such as class, id, or lang were allowed.
<f:form.textfield inputmode="tel" />
<f:image image="{image}" hidden="hidden" />
Enhanced Extbase Validators with PSR-7 Request Support
In TYPO3, Extbase's AbstractValidator now features getter and setter methods for the PSR-7 Request object. This means validators extending AbstractValidator can now access the PSR-7 request object when instantiated via the Extbase ValidationResolver.
This update enables extension developers to create custom validators that utilize data from the PSR-7 request object. For example, accessing request attributes like `frontend.user` becomes seamless within custom validation logic.
This enhancement streamlines validation processes in TYPO3, offering greater flexibility and access to request-related data within Extbase extensions.
Enhance Redirect URL Validation with PSR-14 Event
TYPO3 now supports the ModifyRedirectUrlValidationResultEvent, a PSR-14 event that empowers developers to modify validation results for redirect URLs. This enhancement enables redirects to URLs that may not initially meet existing validation constraints.
This event provides flexibility in handling redirect scenarios, allowing developers to customize validation outcomes according to specific project requirements. It enhances TYPO3's capability to manage redirect URLs effectively within dynamic web applications.
<?php
namespace Vendor\MyExtension\EventListener;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\FrontendLogin\Event\ModifyRedirectUrlValidationResultEvent;
class ValidateRedirectUrl
{
#[AsEventListener('validate-custom-redirect-url')]
public function __invoke(ModifyRedirectUrlValidationResultEvent $event): void
{
$parsedUrl = parse_url($event->getRedirectUrl());
if ($parsedUrl['host'] === 'trusted-host-for-redirect.tld') {
$event->setValidationResult(true);
}
}
}
Custom Translations for Extbase Validators
TYPO3 now supports custom translations for Extbase validators using the new validator translation option keys. This feature allows developers to define unique validation messages tailored to the usage context of each validator instance.
By leveraging this capability, developers can enhance user experience by providing context-specific validation messages. For example, instead of a generic message like "The given subject was empty," validators can now display more meaningful messages like “The field 'Title' is required.”
// Example with translations
use TYPO3\CMS\Extbase\Annotation as Extbase;
#[Extbase\Validate([
'validator' => 'NotEmpty',
'options' => [
'nullMessage' => 'LLL:EXT:site_package/Resources/Private/Language/locallang.xlf:validation.myProperty.notNull',
'emptyMessage' => 'LLL:EXT:site_package/Resources/Private/Language/locallang.xlf:validation.myProperty.notEmpty',
],
])]
protected string $myProperty = '';
// Example with a custom string
use TYPO3\CMS\Extbase\Annotation as Extbase;
#[Extbase\Validate([
'validator' => 'Float',
'options' => [
'message' => 'A custom, non translatable message',
],
])]
protected float $myProperty = 0.0;
Last Call - TYPO3 v13.3 will be the Feature Freeze Version!
Exciting news! TYPO3 v13.3, scheduled for release on September 17, 2024, will be our Feature Freeze version. This means no new features will be added after this release. Do you have any suggestions or features you'd like to see in TYPO3 v13? Now's your last chance to submit your ideas to the TYPO3 core and community. Don't miss out!
Wait... Where is the Most Awaited “Content Block” Feature?
In TYPO3 v13.2, many changes are happening behind the scenes e.g., EXT:content_blocks. For example, the begun laying the groundwork to integrate Content Blocks using a new Schema API. Although Content Blocks aren't fully integrated into TYPO3 Core yet, the next milestone is TYPO3 version 13.3, set for release on September 17, 2024. Content Blocks will debut in this upcoming sprint release, offering a fresh method to create, handle, and edit content elements.
7 Deprecation in TYPO3 v13.2
- RegularExpressionValidator validator option “errorMessage”
- Deprecate hooks for record download
- Obsolete $GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields']
- Deprecate MathUtility::convertToPositiveInteger()
- Deprecate namespaced shorthand validator usage in extbase
- Table dependant definition of columnsOnly
- Deprecate Utility.updateQueryStringParameter()
0 Breaking Changes in TYPO3 v13.1
Exciting news! Beginning with TYPO3 version 13.0, the core team prioritises new features with clear migration paths to ensure smooth progress toward the LTS release. Post TYPO3 v13.0, the community aims to introduce new functionality on a stable foundation to minimize any significant changes that could affect users during the journey to LTS.
What are the System Requirements in TYPO3 v13.2?
PHP versions | TYPO3 v13 2023-2027 | TYPO3 v12 2011-2026 | TYPO3 v11 2020-2024 | TYPO3 v10 2019-2023 | TYPO3 v9 2017-2011 | TYPO3 v8 2015-2020 |
PHP 7.0 | no | no | no | no | no | yes |
PHP 7.1 | no | no | no | no | no | yes |
PHP 7.2 | no | no | no | yes | yes | yes |
PHP 7.3 | no | no | no | yes | yes | yes |
PHP 7.4 | no | no | no | yes | yes | yes |
PHP 8.0 | no | no | yes | no | no | no |
PHP 8.1 | no | yes | yes | no | no | no |
PHP 8.2 | yes | yes | yes | no | no | no |
PHP 8.3 | yes | yes | yes | no | no | no |
TYPO3 version 13 comes with updated system requirements to pave the way for future improvements in upcoming releases and to ensure compatibility with modern packages that have long-term support.
Now, TYPO3 requires PHP version 8.2, which will receive security updates until December 2025. This version of PHP is also necessary for Symfony version 7, a critical component of TYPO3 v13, which is supported until November 2028.
How’s TYPO3 Roadmap and Support?
Support Timeline
Each TYPO3 sprint release (from v13.0 to v13.3) will receive support until the next minor version is launched. TYPO3 v13 LTS (version 13.4), the long-term support edition, will continue to receive bug fixes until April 30, 2026. Security patches for TYPO3 v13 LTS will be available until October 31, 2027.
Further Details
For more details on requirements and dependencies, visit get.typo3.org. These measures are designed to keep TYPO3 current, secure, and well-supported for both users and developers.
Give A Try - Download & Install v13.2
Visit get.typo3.org for complete information on the release, including instructions on downloading and installing TYPO3. The Installation Guide offers detailed steps to guide you through the installation process.
We highly recommend using Composer to set up your TYPO3 environment for a smooth and efficient setup. Follow these resources to ensure a successful installation experience.
Let's wrap it up! What can you do for TYPO3?
In a nutshell, TYPO3 version 13.2 embodies innovation, adaptability, and progress. This release brings a host of exciting features, highlighting TYPO3's commitment to staying ahead in technology.
But the journey doesn't stop here. It's an open invitation to the TYPO3 community and beyond to explore, contribute, and shape the future of TYPO3. The insights shared here are sourced from the official documentation, and I'm thankful to the fantastic TYPO3 Community.
Lastly, I'd like to share two thoughts:
Thanks Notes:
A big thank you to the TYPO3 Open Source community for their invaluable contributions. Show your appreciation on social media, in Slack groups, or consider donating to TYPO3
Keep Exploring & Learning:
Install TYPO3 v13.2 and dive into learning how to adapt your projects or extensions for these updates. If you encounter any challenges or have ideas, submit them on TYPO3 Forge.
Have a Happy TYPO3 Release!
Awesome post on TYPO3 v13.2! The blog breaks down the new features and changes in a straightforward way. It's really helpful for anyone looking to learn about the latest updates and enhancements. Thanks for the detailed insights!
Fantastic overview of the enhancements in TYPO3 v13.2! I’m really impressed with the new features, especially the improvements in the backend user interface and the Live Search functionality. It seems like these updates will significantly enhance productivity for both developers and content editors.I’m curious, though—how do you think these changes will impact the learning curve for new TYPO3 users? Are there any specific features you would recommend focusing on first?
The new Schema API sounds like a game-changer for developers! Having unified access to TCA structures will definitely simplify our coding processes. Thanks for sharing these insights!