From faa217ce1bcfac341f75b5b199e777038fab9f46 Mon Sep 17 00:00:00 2001 From: Alexander Opitz Date: Wed, 11 May 2022 16:23:01 +0200 Subject: [PATCH] [FEATURE] General: ChildTemplate - Processing 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 --- .../Frontend/FrontendController.php | 32 +++++++++++++++++-- Classes/Utility/ApiHelperUtility.php | 31 ++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/Classes/Controller/Frontend/FrontendController.php b/Classes/Controller/Frontend/FrontendController.php index 31f9caece..18a5676f5 100644 --- a/Classes/Controller/Frontend/FrontendController.php +++ b/Classes/Controller/Frontend/FrontendController.php @@ -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); } /** @@ -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()); @@ -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; + } } diff --git a/Classes/Utility/ApiHelperUtility.php b/Classes/Utility/ApiHelperUtility.php index 4c724b438..008c7774d 100644 --- a/Classes/Utility/ApiHelperUtility.php +++ b/Classes/Utility/ApiHelperUtility.php @@ -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(