Skip to content

Commit

Permalink
[FEATURE] General: ChildTemplate - Processing
Browse files Browse the repository at this point in the history
If childTemplate configuration in mapping exists, it will be used to
overwrite values from default mapping and used for followup rendering.

Related: #364
Release: 8.0.0
  • Loading branch information
Alexander Opitz committed May 11, 2022
1 parent 82df52b commit faa217c
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 3 deletions.
32 changes: 29 additions & 3 deletions Classes/Controller/Frontend/FrontendController.php
Expand Up @@ -83,12 +83,12 @@ public function renderPage($content, $conf)
);
}

return $this->renderElement($pageRecord, 'pages');
return $this->renderElement($pageRecord, 'pages', $conf);
}

public function renderContent($content, $conf)
{
return $this->renderElement($this->cObj->data, 'tt_content');
return $this->renderElement($this->cObj->data, 'tt_content', $conf);
}

/**
Expand All @@ -102,10 +102,14 @@ public function renderContent($content, $conf)
*
* @return string HTML output.
*/
public function renderElement($row, $table)
public function renderElement($row, $table, array $conf)
{
try {
$mappingConfiguration = ApiHelperUtility::getMappingConfiguration($row['tx_templavoilaplus_map']);

$childsSelection = $this->getChildsSelection($conf);
$mappingConfiguration = ApiHelperUtility::getOverloadedMappingConfiguration($mappingConfiguration, $childsSelection);

// getDS from Mapping
$dataStructure = ApiHelperUtility::getDataStructure($mappingConfiguration->getCombinedDataStructureIdentifier());

Expand Down Expand Up @@ -192,4 +196,26 @@ public function processDataValues(array $dataValues, array $DSelements, $valueKe

return $processedDataValues;
}

private function getChildsSelection(array $tsConf): array
{
$childSelection = [];

if ($tsConf['childTemplate']) {
$renderType = $tsConf['childTemplate'];
if (substr($renderType, 0, 9) === 'USERFUNC:') {
$conf = [
'conf' => is_array($tsConf['childTemplate.']) ? $tsConf['childTemplate.'] : [],
'toRecord' => $row,
];
$renderType = GeneralUtility::callUserFunction(substr($renderType, 9), $conf, $this);
}
$childSelection[] = $renderType;
}
if (GeneralUtility::_GP('print')) {
$childSelection[] = 'print';
}

return $childSelection;
}
}
31 changes: 31 additions & 0 deletions Classes/Utility/ApiHelperUtility.php
Expand Up @@ -34,6 +34,37 @@ public static function getMappingConfiguration($combinedMappingConfigurationIden
);
}

public static function getOverloadedMappingConfiguration(MappingConfiguration $mappingConfiguration, array $childsSelection): MappingConfiguration
{
$resultingMappingConfiguration = clone $mappingConfiguration;

foreach ($childsSelection as $selectedChild) {
$childConfiguration = $mappingConfiguration->getChild($selectedChild);
if ($childConfiguration !== null) {
self::mergeMappingConfiguration($resultingMappingConfiguration, $childConfiguration);
}
}

return $resultingMappingConfiguration;
}

public static function mergeMappingConfiguration(MappingConfiguration $mappingConfiguration, MappingConfiguration $mappingConfigurationOverwrite): void
{
// Overwrite combinedTemplateConfigurationIdentifier if set
$newCombinedTemplateIdentifier = $mappingConfigurationOverwrite->getCombinedTemplateConfigurationIdentifier();
if ($newCombinedTemplateIdentifier !== '') {
$mappingConfiguration->setCombinedTemplateConfigurationIdentifier($newCombinedTemplateIdentifier);
}

// Merge fieldConfiguration
$mappingConfiguration->setMappingToTemplate(
array_merge_recursive(
$mappingConfiguration->getMappingToTemplate(),
$mappingConfigurationOverwrite->getMappingToTemplate()
)
);
}

public static function getTemplateConfiguration($combinedTemplateConfigurationIdentifier): TemplateConfiguration
{
return self::getConfiguration(
Expand Down

0 comments on commit faa217c

Please sign in to comment.