You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TYPO3 v12+后端:按记录语言设置自定义字段默认值

在TYPO3后端为自定义字段设置随记录语言变化的默认值(TYPO3 v12+)

需求说明

为自定义记录的字段(输入框或RTE字段)设置随记录自身语言(sys_language_uid)变化的默认值:

  • 默认语言(sys_language_uid=0)的disclaimer字段默认值为 Please consider our ...
  • 德语翻译记录(sys_language_uid=1)的disclaimer字段默认值为 Bitte beachten Sie unsere ...

已知局限

  • 通过TCAdefaults.tx_myrecords_domain_model_record.disclaimer可设置全局默认值,但无法区分记录语言;该方式支持RTE字段及HTML格式文本。
  • TCA配置中无法直接设置动态语言相关的默认值。
  • 标签的语言专属配置(如下方示例)针对的是后端用户的界面语言,而非记录自身的语言,不符合需求:
TCEFORM.pages.title {
    label = LLL:EXT:my_ext/Resources/Private/Language/locallang.xlf:table.column
    label.default = New Label
    label.de = Neuer Feldname
}

解决方案:使用记录插入前事件(TYPO3 v12+)

通过TYPO3的BeforeRecordInsertEvent事件,在记录插入到数据库前根据其语言设置对应的默认值,支持输入框和RTE字段。

步骤1:创建事件监听器

在你的扩展中创建事件监听器类,路径为Classes/EventListener/SetLanguageDependentDefaultValue.php:

<?php

declare(strict_types=1);

namespace Vendor\MyExt\EventListener;

use TYPO3\CMS\Core\DataHandling\Event\BeforeRecordInsertEvent;

class SetLanguageDependentDefaultValue
{
    public function __invoke(BeforeRecordInsertEvent $event): void
    {
        // 仅针对目标表和字段处理
        $table = $event->getTable();
        $field = 'disclaimer';
        if ($table !== 'tx_myrecords_domain_model_record') {
            return;
        }

        $recordData = $event->getRecordData();
        // 仅当字段为空时设置默认值
        if (!empty($recordData[$field])) {
            return;
        }

        // 根据记录语言设置对应默认值
        $sysLanguageUid = (int)$recordData['sys_language_uid'] ?? 0;
        switch ($sysLanguageUid) {
            case 0:
                // 默认语言的默认值,支持HTML格式
                $defaultValue = '<p>Please consider our ...</p>';
                break;
            case 1:
                // 德语记录的默认值
                $defaultValue = '<p>Bitte beachten Sie unsere ...</p>';
                break;
            default:
                // 其他语言可设置默认值或留空
                $defaultValue = '';
        }

        if (!empty($defaultValue)) {
            $event->setRecordData(array_merge($recordData, [$field => $defaultValue]));
        }
    }
}

步骤2:注册事件监听器

在扩展的Configuration/Services.yaml中注册监听器:

services:
  Vendor\MyExt\EventListener\SetLanguageDependentDefaultValue:
    tags:
      - name: event.listener
        identifier: 'my-ext/set-language-dependent-default-value'
        event: TYPO3\CMS\Core\DataHandling\Event\BeforeRecordInsertEvent

说明

  • 该方案会在用户创建新记录(包括翻译记录)时,自动根据记录的sys_language_uid填充对应默认值。
  • 支持RTE字段的HTML格式内容,直接在$defaultValue中写入HTML即可。
  • 仅当字段为空时才设置默认值,不会覆盖用户手动输入的内容。

内容的提问来源于stack exchange,提问作者Sybille Peters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:27:18