如何在TYPO3中获取已处理图片的URL?
你遇到的问题核心在于:直接调用file:current:publicUrl会返回原始文件的URL,而用户在内容元素中做的裁剪/修改配置是关联到sys_file_reference记录(而非原始sys_file)的,对应的处理后图片存储在file_processedImages表中,需要通过正确的方式读取这些关联的处理记录。
解决方案:使用IMG_RESOURCE获取处理后图片URL
修改你的TypoScript配置,将原来获取publicUrl的TEXT对象替换为IMG_RESOURCE。IMG_RESOURCE会自动识别内容元素中图片的裁剪/处理设置,从file_processedImages表中返回对应的已处理图片URL。
调整后的完整TS配置如下:
# <------------ Speakers -------- tt_content.speakers = FLUIDTEMPLATE tt_content.speakers { file = EXT:cce/Resources/Speakers.html variables { images = FILES images { references { table = tt_content fieldName = image } renderObj = COA renderObj { 10 = TEXT 10 { data = file:current:uid treatIdAsReference = 1 wrap = |, } # 替换原来的TEXT为IMG_RESOURCE获取处理后URL 20 = IMG_RESOURCE 20 { file { import.data = file:current:uid treatIdAsReference = 1 # 若需要强制统一处理规则(比如固定尺寸),可添加以下配置,否则自动使用内容元素中的用户设置 # width = 300c # height = 300c } wrap = |### } 30 = TEXT 30 { data = file:current:title wrap = |, } 40 = TEXT 40 { data = file:current:description htmlSpecialChars = 1 } } } } }
为什么原来的方式不生效?
当你在FILES的references中指定table = tt_content和fieldName = image时,file:current指向的是sys_file_reference记录(而非原始的sys_file文件)。直接调用file:current:publicUrl会绕过sys_file_reference中的裁剪配置,直接返回原始文件的URL。
而IMG_RESOURCE会读取sys_file_reference中的crop、width、height等用户设置,自动匹配或生成对应的file_processedImages记录,从而返回处理后的图片URL。
额外提示
如果你不需要通过COA拼接数据,而是在Fluid模板中直接处理,也可以使用<f:image>视图助手,它同样会自动使用内容元素中配置的图片处理规则:
<!-- 直接输出处理后的图片 --> <f:image image="{image}" treatIdAsReference="1" /> <!-- 仅获取处理后的图片URL --> <f:image image="{image}" treatIdAsReference="1" absolute="1" returnUri="1" />
内容的提问来源于stack exchange,提问作者MJay

