在多站点 TYPO3 安装中进行站点特定配置的最佳方法是什么?

What's the best way to site specific configuration in a multisite TYPO3 installation?

我们安装了 TYPO3 9.5,里面有很多不同的网站。

我们想为每个站点存储一些自定义配置(例如,在页脚 yes/no 中显示 phone 编号等),并让编辑能够以简单的方式更改它在后端。

如果我们可以将这些属性存储在每个站点的根页面上,但能够在需要时覆盖子页面上的(某些)属性,那就太好了。

类似于fluidtypo3/flux带来的页面属性。

是否有可能通过 TYPO3 核心和自定义扩展来实现?例如。通过扩展页面 table 或添加自定义 table?

您需要区分站点配置和常规页面!

  • 站点配置对完整站点有效,因此对每个页面
  • 页面在页面级别上可以不同

两个用例都是有效的,所以让我们详细解释一下


扩展站点配置

可以通过创建文件 <site-extension>/Configuration/SiteConfiguration/Overrides/sites.php

轻松扩展站点配置
<?php
defined('TYPO3_MODE') || die('Access denied.');

call_user_func(
    function ($table) {
        $GLOBALS['SiteConfiguration'][$table]['columns']['trackingCode'] = [
            'label' => 'Label',
            'config' => [
                'type' => 'input',
                'eval' => 'trim',
                'placeholder' => 'GTM-123456',
            ],
        ];

        $GLOBALS['SiteConfiguration'][$table]['types']['0']['showitem'] .= ',--div--;Extra,trackingCode';
    },
    'site'
);

然后可以轻松获取新字段 trackingCode 的值,例如通过 TS data = site:trackingCode。作为替代方案,您还可以使用 SiteProcessor 访问 FLUIDTEMPLATE.

中的站点配置

扩展页面

创建文件<site-extension>/Configuration/TCA/Overrides/pages.php

<?php

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
    'pages',
    [
        'trackingCode' => [
            'exclude' => true,
            'label' => 'A label',
            'config' => [
                'type' => 'input',
            ]
        ],
    ]
);

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
    'pages',
    '--div--;Extra, trackingCode'
);

和`ext_tables.sql``

CREATE TABLE pages (
    trackingCode text NOT NULL
);

并且您可以使用 TypoScript 访问该字段,并使用 {data.trackingCode}.

在 FLUIDTEMPLATE 中访问该字段

使用幻灯片

通过将 trackingCode 添加到 [FE][addRootLineFields] 中的逗号分隔列表(使用安装工具 > 设置 > 配置安装范围选项,可以覆盖所有子页面的值。

以下 TypoScript 将启动根行和 return 第一个值集。

lib.code = TEXT
lib.code.data = levelfield:-1,trackingCode, slide