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);
})();
Note
Replace site_package with the key from your extension key.
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.
Note
The inheritance hierarchy from TypoScript is maintained meaning if you set a field value on the root page it can be overwritten on subpages (if a template record exists for that subpage).
Note
The way the TypoScript file import is maintained in the template constants
field can be adjusted by the TypoScript constant
module.tx_easyconf.settings.typoScriptConstantMapper.importStatementHandling
.
Definition¶
/**
* Define columns
*/
$propertyMaps = [
TcaUtility::getPropertyMap(
TypoScriptConstantMapper::class,
'easyconf.demo',
'company, domain, firstName, lastName',
'owner'
),
]
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.
Note
Since these fields have site scope a change on one page is shown on all other pages having a template record meaning no hierarchical configuration is possible as known from the TypoScript mapping.
Definition¶
/**
* Define columns
*/
$propertyMaps = [
TcaUtility::getPropertyMap(
SiteConfigurationMapper::class,
'easyconf.data.demo',
'company, contact, email, phone',
'agency'
),
]
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'
),
Mapping result¶
Form field |
Path from |
---|---|
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);
})();