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

headless TYPO3中如何将bodytext内t3://链接转换为完整URL

stdWrap_HTMLparser未生效的核心原因是该方法默认未加载RTE链接解析的相关配置,你可以通过以下两种方案实现t3://协议链接到完整绝对URL的转换:

方案1:复用原生RTE解析规则(推荐)

TYPO3内置的lib.parseFunc_RTE已经包含了完整的富文本解析、链接转换逻辑,仅需额外配置强制生成绝对URL即可:

// 定义解析配置
$rteParseConfig = [
    'parseFunc.' => [
        '<' => 'lib.parseFunc_RTE',
        'typolink.' => [
            'forceAbsoluteUrl' => 1,
        ],
    ],
];

// 处理bodytext字段
$processedBodytext = $cObj->stdWrap($element['bodytext'], $rteParseConfig);

该方案会自动处理所有类型的t3://链接(页面、文件、邮件、外部链接等),同时保留RTE的所有富文本格式,不需要额外自定义匹配逻辑。

方案2:手动解析替换链接

如果你不需要保留RTE默认的格式处理逻辑,仅需替换链接,可以借助LinkService手动处理:

use TYPO3\CMS\Core\LinkHandling\LinkService;
use TYPO3\CMS\Core\Utility\GeneralUtility;

$linkService = GeneralUtility::makeInstance(LinkService::class);
// 匹配所有t3://协议的链接
preg_match_all('/href="(t3:\/\/[^"]+)"/i', $element['bodytext'], $matchResult);

if (!empty($matchResult[1])) {
    foreach ($matchResult[1] as $t3Uri) {
        try {
            $linkInfo = $linkService->resolve($t3Uri);
            $absoluteUrl = $cObj->typolink_URL([
                'parameter' => $linkInfo['pageuid'] ?? $linkInfo['file'] ?? $t3Uri,
                'forceAbsoluteUrl' => 1,
            ]);
            $element['bodytext'] = str_replace($t3Uri, $absoluteUrl, $element['bodytext']);
        } catch (\Exception $e) {
            // 可自定义无效链接的处理逻辑
        }
    }
}
注意事项
  • 提前在站点管理(Site Management)中配置正确的Base URL为完整域名(如https://your-domain.com/),否则生成的链接可能缺少域名前缀
  • 非前端上下文(CLI、后端模块)调用时需要手动初始化站点上下文,避免typolink无法获取站点配置
  • 处理header_link等非RTE字段的t3://链接时,直接调用$cObj->typolink_URL(['parameter' => $linkValue, 'forceAbsoluteUrl' => 1])即可完成转换

内容的提问来源于stack exchange,提问作者Aristeidis Karavas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:04