TYPO3 11 News扩展10.0.3:分类页面路由配置后点击报错求助
我在使用带分类功能的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

