Feature: #98016 - PSR-14 EvaluateModifierFunctionEvent

See forge#98016

Description

A new PSR-14 event \TYPO3\CMS\Core\TypoScript\AST\Event\EvaluateModifierFunctionEvent has been introduced which allows own TypoScript functions using the := operator.

This is a substitution of the old $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tsparser.php']['preParseFunc'] hook as described in this Changelog.

Impact

The TYPO3 Core tests come with test extension EXT:core/Tests/Functional/Fixtures/Extensions/test_typoscript_ast_function_event to functional test the new event. The extension implements an example listener that can be used as boilerplate.

A simple TypoScript example looks like this:

someIdentifier = originalValue
someIdentifier := myModifierFunction(myFunctionArgument)
Copied!

To implement myModifierFunction, an extension needs to register an event listener in file Configuration/Services.yaml:

MyVendor\MyPackage\EventListener\MyTypoScriptModifierFunction:
tags:
  - name: event.listener
    identifier: 'my-package/typoscript/evaluate-modifier-function'
Copied!

The corresponding event listener class could look like this:

use TYPO3\CMS\Core\TypoScript\AST\Event\EvaluateModifierFunctionEvent;

final class MyTypoScriptModifierFunction
{
    public function __invoke(EvaluateModifierFunctionEvent $event): void
    {
        if ($event->getFunctionName() === 'myModifierFunction') {
            $originalValue = $event->getOriginalValue();
            $functionArgument = $event->getFunctionArgument();
            // Manipulate values and set new value
            $event->setValue($originalValue . ' example ' . $functionArgument);
        }
    }
}
Copied!