30+ Enhancements in TYPO3 v13.2

30+ Enhancements in TYPO3 v13.2

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.

Before starting, look at the major goals of TYPO3 v13 LTS (long-term support).

VersionPrimary FocusEstimated Release
13.0Breaking changes and new system requirementsReleased: 2024-01-30
13.1Reusable components for creating new sitesEstimated: 2024-04-23
13.2Content blocks and new APIs for integrationsEstimated: 2024-07-02
13.3Feature freezeEstimated: 2024-09-17
13.4 LTS-releaseEstimated: 2024-10-15

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.

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.

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.

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'];

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

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.

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.

TYPO3 Editor gots small but impactful feature called “Edit Columns”. Go to List > Choose your page > Checkbox the record > Click on “Edit columns” button.

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.

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
        }
    }
}

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.

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.

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.

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.

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}

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

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>

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>

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')}

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"
>

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".

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

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 = *
}

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.

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" />

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.

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);
        }
    }
}

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;

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!

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.

  • 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()

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.

PHP versionsTYPO3 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.0nononononoyes
PHP 7.1nononononoyes
PHP 7.2nononoyesyesyes
PHP 7.3nononoyesyesyes
PHP 7.4nononoyesyesyes
PHP 8.0nonoyesnonono
PHP 8.1noyesyesnonono
PHP 8.2yesyesyesnonono
PHP 8.3yesyesyesnonono

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.

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.

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.

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!

Get hassle-free upgrade service from a certified TYPO3 Developer

  • 350+ Extensions upgrade to TYPO3 LTS versions
  • 150+ Completed TYPO3 upgrade sites (from v6 to current LTS)
  • 35+ Team of TYPO3 developers
  • 13+ Years of TYPO3 experience
  • 3 Package plans are available for the TYPO3 upgrade
  • 2 Days of quick support (reaction and resolution time)
TYPO3 Upgrade Gig
upgrade

Post a Comment

×
Captcha Code Can't read the image? Click here to refresh
  • user
    Frank Oster 2024-08-16 at 2:49 pm

    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!

  • user
    Michelle Diederich 2024-07-31 at 2:24 pm

    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?

  • user
    Bernd Gerber 2024-07-19 at 11:11 am

    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!