Using mappers 

Audience: Integrators, Developers

A form value can be mapped to a TypoScript constant, a site configuration property or a field from the configuration table from this extension. The mapping is defined in a php file located under Configuration/TCA/Overrides and assisted by helper functions from the extension TcaUtility class.

Basic TCA-file structure 

<?php

use Buepro\Easyconf\Mapper\EasyconfMapper;
use Buepro\Easyconf\Mapper\SiteConfigurationMapper;
use Buepro\Easyconf\Mapper\TypoScriptConstantMapper;
use Buepro\Easyconf\Utility\TcaUtility;

defined('TYPO3') or die('Access denied.');

if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('easyconf')) {
   return;
}

(static function () {
    $l10nFile = 'LLL:EXT:site_package/Resources/Private/Language/locallang_db.xlf';
    $tca = &$GLOBALS['TCA']['tx_easyconf_configuration'];

    /**
     * Define columns
     */
    $propertyMaps = [
        // ***************************
        // * Here we use the mappers *
        // ***************************
    ];
    $tca['columns'] = TcaUtility::getColumns($propertyMaps, $l10nFile);

    /**
     * Define palettes
     */
    // ...

    /**
     * Modify columns
     */
    // ...

    /**
     * Define type (tabs from the form with palettes and fields)
     */
    // ...

    unset($tca);
})();
Copied!

TypoScript constant mapper 

Description 

On each page where a template record is available TypoScript constants can be altered through form fields. This is achieved by creating a template related file holding the constant definitions and importing this file through the template constants definition.

Definition 

/**
* Define columns
*/
$propertyMaps = [
    TcaUtility::getPropertyMap(
        TypoScriptConstantMapper::class,
        'easyconf.demo',
        'company, domain, firstName, lastName',
        'owner'
    ),
]
Copied!

Mapping result 

Form field TypoScript constant
owner_company easyconf.demo.company
owner_domain easyconf.demo.domain
owner_first_name easyconf.demo.firstName
owner_last_name easyconf.demo.lastName

Site configuration mapper 

Description 

This mapper relates form fields with the site configuration hence writes and reads from the site configuration yaml file.

Definition 

/**
* Define columns
*/
$propertyMaps = [
    TcaUtility::getPropertyMap(
        SiteConfigurationMapper::class,
        'easyconf.data.demo',
        'company, contact, email, phone',
        'agency'
    ),
]
Copied!

Mapping result 

Form field Site configuration property
agency_company easyconf.data.demo.company
agency_contact easyconf.data.demo.contact
agency_email easyconf.data.demo.email
agency_phone easyconf.data.demo.phone

Easyconf mapper 

Description 

This mapper relates form fields with the field fields from the table tx_easyconf_configuration. For each page a template record exists a record is created in the table tx_easyconf_configuration. As a result these form values have a template scope.

Definition 

/**
* Define columns
*/
TcaUtility::getPropertyMap(
    EasyconfMapper::class,
    'demo',
    'showAllProperties',
    'easyconf'
),
Copied!

Mapping result 

Form field Path from fields array
easyconf_demo demo.showAllProperties

Complete code 

<?php

use Buepro\Easyconf\Mapper\EasyconfMapper;
use Buepro\Easyconf\Mapper\SiteConfigurationMapper;
use Buepro\Easyconf\Mapper\TypoScriptConstantMapper;
use Buepro\Easyconf\Utility\TcaUtility;

defined('TYPO3') or die('Access denied.');

if (!\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('easyconf')) {
    return;
}

(static function () {
    $l10nFile = 'LLL:EXT:site_package/Resources/Private/Language/locallang_db.xlf';
    $tca = &$GLOBALS['TCA']['tx_easyconf_configuration'];

    /**
    * Define columns
    */
    $propertyMaps = [
        TcaUtility::getPropertyMap(
            TypoScriptConstantMapper::class,
            'easyconf.demo',
            'company, domain, firstName, lastName',
            'owner'
        ),
        TcaUtility::getPropertyMap(
            SiteConfigurationMapper::class,
            'easyconf.data.demo',
            'company, contact, email, phone',
            'agency'
        ),
        TcaUtility::getPropertyMap(
            EasyconfMapper::class,
            'demo',
            'showAllProperties',
            'easyconf'
        ),
    ];
    $tca['columns'] = TcaUtility::getColumns($propertyMaps, $l10nFile);

    /**
    * Define palettes
    */
    $tca['palettes'] = [
        'paletteCompany' => TcaUtility::getPalette(
            'company, domain',
            'owner'
        ),
    ];

    /**
    * Modify columns
    */
    TcaUtility::modifyColumns(
        $tca['columns'],
        'showAllProperties',
        [
            'onChange' => 'reload',
            'config' => ['type' => 'check', 'renderType' => 'checkboxToggle'],
        ],
        'easyconf'
    );
    TcaUtility::modifyColumns(
        $tca['columns'],
        'firstName, lastName',
        ['displayCond' => 'FIELD:easyconf_show_all_properties:REQ:true'],
        'owner'
    );

    /**
    * Define type (tabs from the form with palettes and fields)
    */
    $tabs = [
        'tabTypoScript' => implode(', ', [
            '--palette--;;paletteCompany',
            TcaUtility::getFieldList('firstName, lastName', 'owner'),
        ]),
        'tabSiteConfiguration' => TcaUtility::getFieldList('company, contact, email, phone', 'agency'),
        'tabEasyconf' => TcaUtility::getFieldList('showAllProperties', 'easyconf'),
    ];
    $tca['types'][0] = TcaUtility::getType($tabs, $l10nFile);

    unset($tca);
})();
Copied!