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

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配置

额外排查点

  1. 验证PID正确性:确认PID=85的页面下存在tt_address记录,且记录未被删除、隐藏
  2. 权限检查:确保前端用户有权限访问该PID下的tt_address记录(可在后台列表模块查看记录状态)
  3. 模板路径验证:确认MarkerDetailsTemplate.html确实在fileadmin/user_upload/目录下,文件名大小写与Typoscript中的配置一致(TYPO3对文件名大小写敏感)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:17:37