Extbase/Fluid中如何获取并展示后台指定的tt_address关联记录
解决方案
步骤1:调整TypoScript配置
你当前返回所有记录的原因是DatabaseQueryProcessor没有添加筛选条件,后台选中的地址uid存储在FlexForm的faddress字段中,修改TypoScript如下:
tt_content { addresscontainer = FLUIDTEMPLATE addresscontainer { templateName = AddressContainer templateRootPaths { 10 = EXT:xyz/Resources/Private/Partials/ContentElements/ } partialRootPaths { 10 = EXT:xyz/Resources/Private/Partials } dataProcessing { # 低于TYPO3 v10版本需要先加以下FlexForm处理器,v10及以上版本可省略 # 10 = TYPO3\CMS\Frontend\DataProcessing\FlexFormProcessor # 10 { # as = flexformData # } 20 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor 20 { # 校验选中地址存在时才执行查询 if.isTrue.field = pi_flexform_transformed:faddress # 低版本TYPO3替换为 if.isTrue.field = flexformData:faddress table = tt_address # 仅查询选中的对应uid的地址记录 where = uid = {field:pi_flexform_transformed:faddress} # 低版本TYPO3替换为 where = uid = {field:flexformData:faddress} # 开启变量解析 insertData = 1 # 取消pid限制(tt_address的uid全局唯一) pidInList = 0 as = address_record } } } }
步骤2:调整Fluid模板
DatabaseQueryProcessor返回的是查询结果数组,即便只有1条记录也需要取对应索引或者遍历,推荐写法如下(兼容空值场景):
<f:if condition="{address_record}"> <f:for each="{address_record}" as="addressItem"> <strong>{addressItem.data.company}</strong><br> <!-- 按需添加其他需要展示的字段 --> <p> {addressItem.data.address}<br> {addressItem.data.zip} {addressItem.data.city}<br> 联系电话:{addressItem.data.phone} </p> </f:for> </f:if>
如果确定配置中maxitems=1仅会选择1条记录,也可以直接取数组第一条简化写法:
<strong>{address_record.0.data.company}</strong><br>
内容的提问来源于stack exchange,提问作者distrid
相关产品推荐
相关产品推荐

