TYPO3中tt_address数据渲染表格仅显示表头问题求助
TYPO3 tt_address表格仅显示表头无数据问题排查
问题描述
搭建了测试环境,已安装intro-package、ods_osm和tt_address扩展,想要展示tt_address的标记数据表格(该数据同时用于地图),编写了Typoscript和Fluid模板后,前端仅显示表头,无数据内容。相关代码如下:
页面扩展模板(Typoscript)
lib.markerTable = FLUIDTEMPLATE lib.markerTable { templateName = MarkerDetailsTemplate templateRootPaths { 10 = fileadmin/user_upload/ } variables { markerData.select { pidInList = 85 selectFields = uid, name, address, www } } }
Fluid模板(MarkerDetailsTemplate.html)
<table> <thead> <tr> <th>Name</th> <th>Address</th> <th>Website</th> </tr> </thead> <tbody> <f:for each="{markerData}" as="marker"> <tr> <td>{marker.name}</td> <td>{marker.address}</td> <td><a href="{marker.www}" target="_blank">{marker.www}</a></td> </tr> </f:for> </tbody> </table>
渲染代码(Default.html中添加)
<div class="marker-table-section"> <f:cObject typoscriptObjectPath="lib.markerTable" /> </div>
补充TSOB条目
[markerTable] = FLUIDTEMPLATE [templateName] = MarkerDetailsTemplate [templateRootPaths] [variables] [markerData] [select] [pidInList] = 85 [selectFields] = uid, name, address, www
问题原因与解决方案
核心问题是未指定查询的表(tt_address),且markerData的定义方式无法触发数据库查询——直接在变量下嵌套select配置,TYPO3不会自动执行查询,需要将markerData定义为CONTENT对象,或者使用Fluid内置的查询工具。
方案1:用CONTENT对象获取数据(通用方案)
修改Typoscript,明确指定查询表并使用CONTENT对象执行查询:
lib.markerTable = FLUIDTEMPLATE lib.markerTable { templateName = MarkerDetailsTemplate templateRootPaths { 10 = fileadmin/user_upload/ } variables { markerData = CONTENT markerData { table = tt_address select { pidInList = 85 selectFields = uid, name, address, www # 可选:过滤已删除/隐藏的记录(默认已处理,可显式声明) # where = deleted=0 AND hidden=0 # 可选:按名称排序 # orderBy = name ASC } } } }
table = tt_address是关键,告诉TYPO3要查询的表- CONTENT对象会自动返回符合条件的记录数组,Fluid的
f:for可以直接遍历
方案2:用Fluid的f:query ViewHelper(TYPO3 10+)
如果使用TYPO3 10及以上版本,可直接在Fluid模板中查询数据,简化Typoscript:
修改Typoscript
lib.markerTable = FLUIDTEMPLATE lib.markerTable { templateName = MarkerDetailsTemplate templateRootPaths { 10 = fileadmin/user_upload/ } variables { storagePid = 85 } }
修改Fluid模板
<f:query table="tt_address" pidInList="{storagePid}" selectFields="uid, name, address, www" as="markerData"> <table> <thead> <tr> <th>Name</th> <th>Address</th> <th>Website</th> </tr> </thead> <tbody> <f:for each="{markerData}" as="marker"> <tr> <td>{marker.name}</td> <td>{marker.address}</td> <td><a href="{marker.www}" target="_blank">{marker.www}</a></td> </tr> </f:for> </tbody> </table> </f:query>
f:query是TYPO3内置ViewHelper,直接在模板中执行数据库查询,无需复杂的Typoscript配置
额外排查点
- 验证PID正确性:确认PID=85的页面下存在tt_address记录,且记录未被删除、隐藏
- 权限检查:确保前端用户有权限访问该PID下的tt_address记录(可在后台列表模块查看记录状态)
- 模板路径验证:确认
MarkerDetailsTemplate.html确实在fileadmin/user_upload/目录下,文件名大小写与Typoscript中的配置一致(TYPO3对文件名大小写敏感)
内容的提问来源于stack exchange,提问作者user3759978
相关产品推荐
相关产品推荐

