You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

TYPO3 9原生URL重写场景下,如何通过TypoScript判断扩展查询参数

在TYPO3 9原生URL重写中基于扩展参数设置TypoScript条件的解决方案

这个问题我之前也碰到过!TYPO3 9引入的原生Site Handling路由机制,会把友好URL里的参数解析到**路由属性(route attributes)**里,而不是原来的GET查询参数或者GP全局变量里,这就是为什么你之前的两种写法都失效了。

正确的条件写法

直接从请求的路由参数里获取tx_news_pi1的参数即可,示例代码如下:

# 当新闻ID参数存在且大于0时触发条件
[request.getAttributes()['route']['arguments']['tx_news_pi1']['news'] > 0]
    # 这里写你的条件逻辑,比如自定义页面标题、加载特定模板片段
    page.title = 新闻详情页:{request.getAttributes()['route']['arguments']['tx_news_pi1']['news']}
    page.includeCSS.newsDetail = EXT:my_ext/Resources/Public/Css/NewsDetail.css
[global]

为什么之前的写法失效?

  • 旧的[globalVar = GP:tx_news_pi1|news > 0]:TYPO3 9+的原生路由会把友好URL的参数从GET查询中移除,解析到路由属性里,所以GP全局变量拿不到这些参数了。
  • request.getQueryParams():同样的道理,友好URL的参数已经被路由组件处理,不在查询参数集合里了,所以直接取queryParams是空的。

调试小技巧

如果你不确定参数的具体结构,可以在TypoScript里加一段调试代码,把路由参数输出到页面上:

page.debugRouteArgs = TEXT
page.debugRouteArgs.value = 路由参数:{request.getAttributes()['route']['arguments']}
page.debugRouteArgs.insertData = 1
page.debugRouteArgs.wrap = <pre>|</pre>

访问页面后就能看到完整的参数结构,确认tx_news_pi1[news]对应的路径是否正确。

特殊情况说明

如果你的友好URL是类似/news/detail/8这种简化格式(没有tx_news_pi1前缀),那参数可能直接在路由参数的顶层,比如request.getAttributes()['route']['arguments']['news'],这时候需要根据你在Site Handling里配置的路由规则调整路径。

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

火山引擎 最新活动