更改站点中某些页面的站点配置中的语言参数

Change language parameters in site configuration for some pages in a site

在 TYPO3 10 LTS 中是否可以更改单个页面的站点配置中的选项 fallbackType

背景:

我为站点使用选项 fallbackType fallback。但是对于几页我需要 fallbackType strict。在 TYPO3 8 之前,这可以通过简单的扩展模板和不同的配置配置来实现。 TYPO3 10有办法吗?

据我所知,不可能将 TYPO3 配置为以这种方式运行。覆盖单个页面的语言配置的唯一方法是自定义中间件。

您可以在这里找到一个工作示例:https://github.com/qbus-agentur/typo3-dynamic-language-mode

我更改了主要功能:

    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
    $lang = $this->getCurrentSiteLanguage($request);
    $pageArguments = $this->getPageArguments($request);

    if ($lang === null || $pageArguments === null) {
        return $handler->handle($request);
    }

    // get current page ID
    $currentRouting = $request->getAttribute('routing');
    $currentPage = $currentRouting->getPageId();

    $site = $request->getAttribute('site');
    $default = $site->getLanguages()[0];
    if ($lang->getLanguageId() !== $default->getLanguageId()) {
        // Check if page is in $pagesWhereToChange and apply a dynamic language configuration in that case

        if (in_array($currentPage, $this->pagesWhereToChange) > 0) {
            \Closure::bind(function() use ($lang, $newId) {
                $lang->fallbackType = 'free';
                $lang->fallbackLanguageIds = [];
            }, null, SiteLanguage::class)();
        }
    }

    return $handler->handle($request);
}

其中 $this->pagesWhereToChange 是一个页面数组:

/**
 * pagesWhereToChange
 *
 * @var array
 */
protected $pagesWhereToChange = [30,41];

由于 TSFE 尚未呈现,因此无法使用错别字配置数组。