getPageTitleProviderConfiguration($request); $titleProviders = $this->setProviderOrder($titleProviders); $orderedTitleProviders = $this->dependencyOrderingService->orderByDependencies($titleProviders); $this->logger->debug('Page title providers ordered', [ 'orderedTitleProviders' => $orderedTitleProviders, ]); foreach ($orderedTitleProviders as $configuration) { if (is_subclass_of($configuration['provider'] ?? null, PageTitleProviderInterface::class)) { /** @var PageTitleProviderInterface $titleProviderObject */ $titleProviderObject = $this->container->get($configuration['provider']); $titleProviderObject->setRequest($request); if (($pageTitle = $titleProviderObject->getTitle()) || ($pageTitle = $this->pageTitleCache[$configuration['provider']] ?? '') !== '' ) { $this->logger->debug('Page title provider {provider} used on page {title}', [ 'title' => $pageTitle, 'provider' => $configuration['provider'], ]); $this->pageTitleCache[$configuration['provider']] = $pageTitle; break; } $this->logger->debug('Page title provider {provider} skipped on page {title}', [ 'title' => $pageTitle, 'provider' => $configuration['provider'], 'providerUsed' => $configuration['provider'], ]); } } return $pageTitle; } /** * @internal */ public function getPageTitleCache(): array { return $this->pageTitleCache; } /** * @internal */ public function setPageTitleCache(array $pageTitleCache): void { $this->pageTitleCache = $pageTitleCache; } /** * Get the TypoScript configuration for pageTitleProviders */ private function getPageTitleProviderConfiguration(ServerRequestInterface $request): array { $config = $this->typoScriptService->convertTypoScriptArrayToPlainArray( $request->getAttribute('frontend.typoscript')->getConfigArray() ); return $config['pageTitleProviders'] ?? []; } /** * @return string[] * @throws \UnexpectedValueException */ protected function setProviderOrder(array $orderInformation): array { foreach ($orderInformation as $provider => &$configuration) { if (isset($configuration['before'])) { if (is_string($configuration['before'])) { $configuration['before'] = GeneralUtility::trimExplode(',', $configuration['before'], true); } elseif (!is_array($configuration['before'])) { throw new \UnexpectedValueException( 'The specified "before" order configuration for provider "' . $provider . '" is invalid.', 1535803185 ); } } if (isset($configuration['after'])) { if (is_string($configuration['after'])) { $configuration['after'] = GeneralUtility::trimExplode(',', $configuration['after'], true); } elseif (!is_array($configuration['after'])) { throw new \UnexpectedValueException( 'The specified "after" order configuration for provider "' . $provider . '" is invalid.', 1535803186 ); } } } return $orderInformation; } }