From d3c12b7945f200c0cb0ac36eaed4a8bad1028928 Mon Sep 17 00:00:00 2001 From: Benni Mack Date: Mon, 5 Mar 2018 19:49:50 +0100 Subject: [PATCH] [BUGFIX] RootlineUtility only resolves defined relation fields The RootlineUtility first selects all fields, which have been added via the config option "addRootLineFields". After that, it iterates over all(!) columns that are defined as relation. The change modifies the loop so that only relations are resolved for field pages.media (predefined) and those fields that have been added to $GLOBALS[TYPO3_CONF_VARS][FE][addRootLineFields]. Resolves: #84144 Releases: master, 8.7 Change-Id: I3150f7cdd14aff3f25d5070f4ce190d510ba3614 Reviewed-on: https://review.typo3.org/56015 Reviewed-by: Markus Klein Tested-by: TYPO3com Reviewed-by: Frans Saris Reviewed-by: Georg Ringer Tested-by: Georg Ringer Reviewed-by: Jigal van Hemert Tested-by: Jigal van Hemert --- .../core/Classes/Utility/RootlineUtility.php | 3 ++- ...operlySelectedRelationalDatabaseFields.rst | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 typo3/sysext/core/Documentation/Changelog/master/Important-84144-RootlineUtilityIsEnrichingOnlyProperlySelectedRelationalDatabaseFields.rst diff --git a/typo3/sysext/core/Classes/Utility/RootlineUtility.php b/typo3/sysext/core/Classes/Utility/RootlineUtility.php index 52dc33ce1d2b..20d55c1bea0a 100644 --- a/typo3/sysext/core/Classes/Utility/RootlineUtility.php +++ b/typo3/sysext/core/Classes/Utility/RootlineUtility.php @@ -284,7 +284,8 @@ protected function enrichWithRelationFields($uid, array $pageRecord) // @todo Remove this special interpretation of relations by consequently using RelationHandler foreach ($GLOBALS['TCA']['pages']['columns'] as $column => $configuration) { - if ($this->columnHasRelationToResolve($configuration)) { + // Ensure that only fields defined in $rootlineFields (and "addRootLineFields") are actually evaluated + if (array_key_exists($column, $pageRecord) && $this->columnHasRelationToResolve($configuration)) { $configuration = $configuration['config']; if ($configuration['MM']) { /** @var $loadDBGroup \TYPO3\CMS\Core\Database\RelationHandler */ diff --git a/typo3/sysext/core/Documentation/Changelog/master/Important-84144-RootlineUtilityIsEnrichingOnlyProperlySelectedRelationalDatabaseFields.rst b/typo3/sysext/core/Documentation/Changelog/master/Important-84144-RootlineUtilityIsEnrichingOnlyProperlySelectedRelationalDatabaseFields.rst new file mode 100644 index 000000000000..55daecf72a5b --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/master/Important-84144-RootlineUtilityIsEnrichingOnlyProperlySelectedRelationalDatabaseFields.rst @@ -0,0 +1,20 @@ +.. include:: ../../Includes.txt + +================================================================================================== +Important: #84144 - RootlineUtility is enriching only properly selected relational database fields +================================================================================================== + +See :issue:`84144` + +Description +=========== + +The main functionality for fetching the whole rootline of a page previously fetched all relational +fields defined in TCA of a page record. This led to massive performance problems with large menus, +as not all fields are necessary in root line records. + +Now, the rootline fetching only looks up relational data of fields which have been added to +:php:`$GLOBALS[TYPO3_CONF_VARS][FE][addRootLineFields]`. The field `pages.media` is added per +default since it is a predefined value. + +.. index:: Frontend, ext:frontend