基本上我想使用TYPO3中内容元素的“布局”值来实现不同的图像渲染:例如一个名为“圆形图像”的布局,使得该内容元素的所有图像都被裁剪为正方形,并且可能还有一些额外的css类。
在CSC-of of courde中使用的snipplet将无法使用新的fluid_styled_content,所以我尝试让它与FSC一起工作,但我陷入了一些奇怪的地步,因为我无法获取“布局“ - 部分中的值最终渲染图像。
添加一些布局条目(有效):
TCEFORM {
tt_content {
layout {
addItems {
4 = Circle images
}
}
}
使用我自己的部分(和模板)进行FSC (一般情况下):
lib.contentElement.partialRootPaths.200 = EXT:myextkey/Resources/Private/Partials/
lib.contentElement.templateRootPaths.200 = EXT:myextkey/Resources/Private/Templates/FluidContentTemplates
(它们基于原始版本的副本,除了一些调试条目之外没有任何更改。)
现在到了我被困的地方:我可以轻松地获取(并使用,例如用于某些if条件或仅用作测试/调试输出){更高级别中的layout
- 值, Textmedia.html
(模板)以及Gallery.html
我得到{data.layout}
的预期值,例如使用
<f:debug title="my-layout-value">{data.layout}</f:debug>
实际图像的渲染由以下f:render
viewhelper-line完成,与原始版本相同:
<f:for each="{gallery.rows}" as="row">
<div class="ce-row">
<f:for each="{row.columns}" as="column">
<f:if condition="{column.media}">
<div class="ce-column">
<f:debug title="my-layout-value">{data.layout}</f:debug>
<f:render partial="Media/Type" arguments="{file: column.media, dimensions: column.dimensions, data: data, settings: settings}" />
</div>
</f:if>
</f:for>
</div>
</f:for>
因此,据我所知,到目前为止,所有列为arguments
的变量都应传递给图像的渲染。
但在Rendering\Image.html
- 部分中,{data}
的内容突然只是NULL
,因此没有机会使用我的布局值。
Image-partial的其余部分不受影响,图像像往常一样呈现(包括一些硬编码的测试css类,以验证我的“自定义”部分被使用)。
我还尝试在arguments={_all}
中使用Gallery.html
- 部分(真正得到“一切”),导致“哎呀” - 错误:
提供的文件对象类型TYPO3 \ CMS \ Fluid \ ViewHelpers \ MediaViewHelper必须是FileInterface或AbstractFileFolder
我不知道哪里出错了以及如何使所需的逻辑工作(根据内容元素的布局设置改变图像的渲染/类/裁剪)。
答案 0 :(得分:3)
正如您所注意到的,仅部分获取参数参数中提到的那些变量。如果要评估另一个值,则需要更改部分调用并添加该值。
在您的示例中,data
已作为参数传递。但是,该调用并不需要部分您需要layout
值。您需要进一步跟踪(并确保传递data.layout
),直到您拨打部分Rendering/Image
<强>提示:强>
如果使用f:debug
- 标记,请始终使用title参数来标识调用的调试标记:
<f:debug title="my-layout-value at Template X,Line Y">{data.layout}</f:debug>