Typo3如何通过TypoScript访问全局TCA并提取所需内容
完全可以,TypoScript支持通过两种方式实现TCA相关的信息获取,分别对应读取TCA配置本身、读取基于TCA定义的业务记录字段两类场景,具体实现如下:
1 读取TCA全局配置项
如果你需要获取TCA的定义类信息(比如某个表的字段标签、字段配置参数等),TypoScript原生没有直接读取全局TCA数组的语法,可通过自定义简单的userFunc实现:
- 首先在你的自定义扩展中新增工具类:
<?php namespace Vendor\YourExtension\Utility; use TYPO3\CMS\Core\Utility\ArrayUtility; class TcaAccessor { public function getTcaValue($content = '', $conf = []) { $path = $conf['path'] ?? ''; if (empty($path)) return ''; $tca = $GLOBALS['TCA']; try { return ArrayUtility::getValueByPath($tca, $path, '.'); } catch (\Exception $e) { return ''; } } }
- 在TypoScript中调用即可,示例获取
tt_content表header字段的标签:
lib.tcaHeaderLabel = USER lib.tcaHeaderLabel { userFunc = Vendor\YourExtension\Utility\TcaAccessor->getTcaValue path = tt_content.columns.header.label }
2 基于TCA提取业务记录的字段值(常用场景)
如果你需要提取某条/多条记录的实际业务数据(比如标题、图片、正文等),直接用TypoScript自带的RECORDS、CONTENT对象即可,默认会遵循TCA配置自动读取字段值,不需要额外适配TCA:
2.1 提取单条记录的信息
示例获取uid为12的新闻记录(tt_news表)的标题和首图:
lib.singleNews = RECORDS lib.singleNews { tables = tt_news source = 12 conf.tt_news = TEXT conf.tt_news { # 直接写TCA中定义的字段名即可读取对应值 field = title wrap = <h2>|</h2> # 读取FAL关联的图片字段 append = FILES append { references { table = tt_news uid.field = uid fieldName = image } renderObj = IMAGE renderObj { file { import.data = file:current:publicUrl width = 600 } altText.data = file:current:alternative } } } }
2.2 批量提取符合条件的记录信息
示例获取最新发布的5篇新闻的标题和跳转链接:
lib.latestNews = CONTENT lib.latestNews { table = tt_news select { pidInList = 23 # 新闻数据存储的页面ID max = 5 orderBy = datetime DESC where = hidden=0 AND deleted=0 } renderObj = TEXT renderObj { field = title typolink.parameter = 24 # 新闻详情页ID typolink.additionalParams = &tx_ttnews[tt_news]={field:uid} typolink.additionalParams.insertData = 1 wrap = <li>|</li> } wrap = <ul>|</ul> }
注意:所有使用的字段名必须和TCA中
columns下定义的键名完全一致,不确定字段名时可在后台【配置】模块查看全局TCA数组结构。
内容的提问来源于stack exchange,提问作者iamrobertsillo
相关产品推荐
相关产品推荐

