Data Processors

You can process the data of any content element before it is assigned to the fluid template with the help of DataProcessors. They can help you to reduce overusage of ViewHelpers. In general fluid templates shouldn't include too much logic.

For example imagine you have some kind of product content element with these fields:

Element key: product.

You probably also would want to show the price with vat added. Now what if you only want to enter the net amount? You probably would either do some mathematical operations in fluid directly or create a ViewHelper for that. But there is a better way by using a data processor:


namespace VENDOR\Extension\DataProcessing;

use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;

class VatProcessor implements DataProcessorInterface
     * @param ContentObjectRenderer $cObj The data of the content element or page
     * @param array $contentObjectConfiguration The configuration of Content Object
     * @param array $processorConfiguration The configuration of this processor
     * @param array $processedData Key/value store of processed data (e.g. to be passed to a Fluid View)
     * @return array the processed data as key/value store
    public function process(
        ContentObjectRenderer $cObj,
        array $contentObjectConfiguration,
        array $processorConfiguration,
        array $processedData
    ) {
        $vatMultiplier = 1 + $processorConfiguration['vat'] / 100;
        $processedData['data']['priceGross'] = $processedData['data']['tx_mask_price'] * $vatMultiplier;
        return $processedData;

You can create the data processor in the folder Classes/DataProcessing/VatProcessor.php of your sitepackage. The VatProcessor implements the DataProcessorInterface which forces us to implement the process method. There are some parameters we can work with:

The ContentObjectRenderer. You can do any stdWrap operation with it.
Contains the configuration of the current content object.
Here you can define custom options. See TypoScript configuration section.
This is the exact data array you would work with in your fluid templates.

Now we can manipulate the data in $processedData the way we want it. In our case we enhance the array with another entry priceGross. For this we use the price defined in our content element and the additional parameter vat which we will define in the next section.

Register DataProcessor

Now we need to register and configure the data processor for our specific content element. For this we need to add a little bit of TypoScript:

tt_content {
   mask_product {
      dataProcessing {
         110 = VENDOR\Extension\DataProcessing\VatProcessor
         110 {
            vat = 19

The key mask_product represents the CType of our Mask element. Mask adds this mask_ prefix automatically to your specified element key. You can pass any additional parameters to the dataProcessor. They will be available in the $processorConfiguration array.

Use in fluid template

Finally we can use our processed data in the fluid template Product.html:

Title: {data.tx_mask_title} <!-- Some product title -->
Price net: {data.tx_mask_price -> f:format.number(decimals: '2')}€ <!-- 100.00€ -->
Price gross: {data.priceGross -> f:format.number(decimals: '2')}€ <!-- 119.00€ -->

Note that the added entry priceGross does not contain the tx_mask_ prefix.

This way you don't have to rely on multiple ViewHelpers and fluid logic. Move the logic away from you view by using DataProcessors.

Have a look at the official documentation for more examples.