From eaccd35fa752d56212440373cadbfe941ef412b1 Mon Sep 17 00:00:00 2001 From: Benni Mack <benni@typo3.org> Date: Thu, 2 Apr 2020 11:54:40 +0200 Subject: [PATCH] [BUGFIX] Re-Implement record_is_used hook for Fluid-based page view The hook to determine if child records are used is re-implemented. This makes the fluid based page module behave like the legacy PageLayoutView when determining if a record was used, allowing third party extensions to override the core's "is used?" decision. Resolves: #90927 Releases: master Change-Id: Ia72cf7479e04ee9c5ae688cf9c37bed697ac4d3e Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/64049 Reviewed-by: Kevin Appelt <kevin.appelt@icloud.com> Reviewed-by: Oliver Bartsch <bo@cedev.de> Reviewed-by: Claus Due <claus@phpmind.net> Reviewed-by: Georg Ringer <georg.ringer@gmail.com> Tested-by: TYPO3com <noreply@typo3.com> Tested-by: Oliver Bartsch <bo@cedev.de> Tested-by: Claus Due <claus@phpmind.net> Tested-by: Georg Ringer <georg.ringer@gmail.com> --- .../View/BackendLayout/ContentFetcher.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/typo3/sysext/backend/Classes/View/BackendLayout/ContentFetcher.php b/typo3/sysext/backend/Classes/View/BackendLayout/ContentFetcher.php index 1d79bec530c2..21859d75df19 100644 --- a/typo3/sysext/backend/Classes/View/BackendLayout/ContentFetcher.php +++ b/typo3/sysext/backend/Classes/View/BackendLayout/ContentFetcher.php @@ -104,14 +104,28 @@ class ContentFetcher return empty($contentRecords) ? [] : array_merge(...$contentRecords); } + /** + * A hook allows to decide whether a custom type has children which were rendered or should not be rendered. + * + * @return iterable + */ public function getUnusedRecords(): iterable { $unrendered = []; + $hookArray = $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['record_is_used'] ?? []; + $pageLayoutView = PageLayoutView::createFromDrawingConfiguration($this->backendLayout->getDrawingConfiguration()); + $knownColumnPositionNumbers = $this->backendLayout->getColumnPositionNumbers(); $rememberer = $this->backendLayout->getRecordRememberer(); foreach ($this->fetchedContentRecords[$this->backendLayout->getDrawingConfiguration()->getLanguageColumnsPointer()] ?? [] as $contentRecordsInColumn) { foreach ($contentRecordsInColumn as $contentRecord) { - if (!$rememberer->isRemembered((int)$contentRecord['uid']) && !in_array($contentRecord['colPos'], $knownColumnPositionNumbers)) { + $used = $rememberer->isRemembered((int)$contentRecord['uid']); + // A hook mentioned that this record is used somewhere, so this is in fact "rendered" already + foreach ($hookArray as $hookFunction) { + $_params = ['columns' => $knownColumnPositionNumbers, 'record' => $contentRecord, 'used' => $used]; + $used = GeneralUtility::callUserFunction($hookFunction, $_params, $pageLayoutView); + } + if (!$used) { $unrendered[] = $contentRecord; } } -- GitLab