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

TYPO3 11 News扩展10.0.3:分类页面路由配置后点击报错求助

TYPO3 tx_news 分类页面路由报错问题

我在使用带分类功能的tx_news,想要实现mypage.de/category/category1格式的分类页面,展示对应分类下的所有新闻。

已经按照官方文档的「基础配置(包含分类、标签及RSS/Atom订阅)」部分,在site.yaml中添加了路由配置。

详情页Fluid模板中用以下代码生成分类链接:

<f:for each="{newsItem.categories}" as="category" iteration="iteratorCategories">
  <f:link.action
      pageUid="{category.shortcut}"
      arguments="{overwriteDemand:{categories:category.uid}}"
      class="news-list-category__item"
      title="{category.title}">
    {category.title}
  </f:link.action>
</f:for>

生成的链接格式符合yaml配置,但点击后出现错误:

(1/1) TypeError
Return value of GeorgRinger\News\Controller\NewsBaseController::handleNoNewsFoundError() must be of the type string, null returned

请问问题出在哪里?有没有完整的相关教程?该如何解决这个错误?


问题原因

这个错误的核心是handleNoNewsFoundError()方法要求返回字符串,但实际返回了null,通常由两种情况触发:

  • 目标分类下无已发布的新闻,控制器进入错误处理逻辑但未正确返回响应
  • 路由配置或模板参数传递错误,导致控制器无法正确识别分类参数,最终判定为无新闻

解决步骤

1. 检查分类关联的新闻

先确认目标分类下是否存在有效新闻:

  • 后台进入对应分类,查看关联的新闻条目
  • 确保新闻状态为「已发布」,且时间在有效期内(开始时间≤当前时间≤结束时间)

2. 修正模板参数传递

模板中使用category.shortcut作为pageUid存在风险,若分类未配置快捷页面会导致跳转错误。正确做法是指定新闻列表页的UID:

<f:for each="{newsItem.categories}" as="category" iteration="iteratorCategories">
  <f:link.action
      pageUid="123" <!-- 替换为你的新闻列表页UID -->
      arguments="{overwriteDemand:{categories:category.uid}}"
      class="news-list-category__item"
      title="{category.title}">
    {category.title}
  </f:link.action>
</f:for>

若要动态获取列表页UID,可在setup.typoscript中配置:

plugin.tx_news.settings.listPageUid = 123

然后模板中用{settings.listPageUid}代替硬编码值。

3. 完善无新闻时的错误处理

如果需要支持无新闻的分类页面,需自定义错误视图:

  • 复制tx_news扩展的Resources/Private/Partials/List/NoNewsFound.html到你的模板路径
  • 修改该文件,确保返回有效HTML内容
  • 在TS中配置自定义错误视图:
plugin.tx_news.view.partials {
  List/NoNewsFound = EXT:your_extension/Resources/Private/Partials/News/List/NoNewsFound.html
}

也可通过重写NewsBaseController的handleNoNewsFoundError()方法,确保返回字符串格式的响应。

4. 验证路由配置

检查site.yaml中的路由规则,确保分类参数映射正确,示例配置:

routeEnhancers:
  News:
    type: Extbase
    extension: News
    plugin: Pi1
    routes:
      - routePath: '/category/{category-name}'
        _controller: 'News::list'
        _arguments:
          category-name: 'overwriteDemand/categories'
    defaultController: 'News::list'
    aspects:
      category-name:
        type: PersistedAliasMapper
        tableName: sys_category
        routeFieldName: slug

注意routeFieldName需与分类的slug字段对应,若使用title则改为title。

教程参考

TYPO3官方tx_news文档的「Routing」和「Best Practices」章节有详细的分类页面配置说明,社区论坛、官方Slack频道也有大量实战案例可供参考。


内容的提问来源于stack exchange,提问作者Jürgen König

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:40:36