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

TYPO3 8.7升级后用inputLink如何在扩展模板正确显示链接?

搞定TYPO3扩展模板里的t3://page?uid=19链接渲染问题

嘿,我来帮你解决这个TYPO3链接解析的问题!当你切换到renderType => 'inputLink'后,存储的是TYPO3专属的内部链接格式,直接输出肯定没法正常跳转,这里有几个靠谱的解决方案,按需选就行:

这个视图助手是TYPO3专门用来解析各类链接格式的,不管是内部页面、外部URL还是文件链接都能搞定,直接在模板里这么写:

<!-- 渲染带文本的可点击链接 -->
<f:link.typolink parameter="{domainmodel.page.external}">
    点击跳转目标页面
</f:link.typolink>

<!-- 只获取解析后的纯URL字符串 -->
{domainmodel.page.external -> f:format.typolink(returnLast: 'url')}

这个方法不用改控制器,直接在模板里就能搞定,适合快速解决问题。

方案2:控制器里用LinkService解析(更优雅)

如果想在后端就把链接解析好再传给模板,让代码逻辑更整洁,可以注入TYPO3的LinkService来处理:

use TYPO3\CMS\Core\LinkHandling\LinkService;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;

class YourModelController extends ActionController
{
    protected LinkService $linkService;

    // 依赖注入LinkService
    public function injectLinkService(LinkService $linkService)
    {
        $this->linkService = $linkService;
    }

    public function detailAction(YourDomainModel $domainmodel)
    {
        // 解析内部链接格式,拆分成可识别的参数数组
        $linkParts = $this->linkService->resolve($domainmodel->getPage());
        // 用uriBuilder生成完整的前端可访问URL
        $resolvedUrl = $this->uriBuilder->setTargetPageUid($linkParts['pageuid'])->build();
        // 把解析后的URL传给模板
        $this->view->assign('resolvedPageUrl', $resolvedUrl);
    }
}

然后在模板里直接调用{resolvedPageUrl}就行,这种方式适合需要对链接做额外逻辑处理的场景。

方案3:手动拆分参数(应急临时用)

如果只是临时测试或者不想用视图助手/服务,也可以手动拆分t3://page?uid=19里的UID,再用f:uri.page生成URL:

{domainmodel.page.external -> f:format.split(separator: '=')[1] -> f:uri.page()}

不过这个方法只适用于内部页面链接,要是以后链接格式变化或者出现外部链接就会失效,所以还是优先前两种方法更稳妥。

小提醒:记得检查你的TCA配置,确保字段是type => 'input' + renderType => 'inputLink',模型里对应的字段类型是字符串,这样存储的链接格式才会被系统正确识别哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:03:42