TYPO3 8.7升级后用inputLink如何在扩展模板正确显示链接?
搞定TYPO3扩展模板里的
t3://page?uid=19链接渲染问题 嘿,我来帮你解决这个TYPO3链接解析的问题!当你切换到renderType => 'inputLink'后,存储的是TYPO3专属的内部链接格式,直接输出肯定没法正常跳转,这里有几个靠谱的解决方案,按需选就行:
方案1:Fluid模板直接用f:link.typolink(最省心)
这个视图助手是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
相关产品推荐
相关产品推荐

