TYPO3 8 Fluid_styled_content: 在Image-partial中使用layout值
TYPO3 8 Fluid_styled_content: use value of layout in Image-partial
基本上我想使用TYPO3中内容元素的"layout"值来实现图像的不同渲染:例如一个名为 "circle images" 的布局,将该内容元素的所有图像呈现为正方形,并且可能还有一些额外的 css-class.
CSC-times of courde 中使用的代码片段不适用于新的 fluid_styled_content,所以我尝试让它与 FSC 一起使用,但我遇到了一些奇怪的问题,因为我无法在部分最终渲染图像中获取 "layout" 值。
添加一些布局条目(有效):
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 条件或仅作为测试/调试输出)[=57= 中的 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
-partial 中,{data}
的内容突然变成了 NULL
,所以没有机会使用我的布局值。
Image-partial 的其余部分保持不变,图像照常渲染(包括一些硬编码测试 css-class 以验证我的 "custom" partial 是否被使用)。
我还尝试在 Gallery.html
-partial 中使用 arguments={_all}
(真正得到 "everything"),导致 "Oops"-错误:
提供的文件对象类型 TYPO3\CMS\Fluid\ViewHelpers\MediaViewHelper 必须是 FileInterface 或 AbstractFileFolder
我不知道我哪里出错了,也不知道如何使所需的逻辑起作用(根据内容元素的布局设置改变图像的渲染/classes/裁剪)。
正如您所注意到的,partial 仅获取 arguments 参数中提到的那些变量。如果您想评估另一个值,您需要更改部分调用并添加该值。
在您的示例中,data
已作为参数传递。但是该调用不会调用您需要 layout
值的部分。您需要进一步跟踪(并确保您的 data.layout
被传递)直到您到达对部分 Rendering/Image
的调用
提示:
如果您使用 f:debug
-tag,请始终使用 title 参数来标识调用了哪个调试标记:
<f:debug title="my-layout-value at Template X,Line Y">{data.layout}</f:debug>
基本上我想使用TYPO3中内容元素的"layout"值来实现图像的不同渲染:例如一个名为 "circle images" 的布局,将该内容元素的所有图像呈现为正方形,并且可能还有一些额外的 css-class.
CSC-times of courde 中使用的代码片段不适用于新的 fluid_styled_content,所以我尝试让它与 FSC 一起使用,但我遇到了一些奇怪的问题,因为我无法在部分最终渲染图像中获取 "layout" 值。
添加一些布局条目(有效):
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 条件或仅作为测试/调试输出)[=57= 中的 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
-partial 中,{data}
的内容突然变成了 NULL
,所以没有机会使用我的布局值。
Image-partial 的其余部分保持不变,图像照常渲染(包括一些硬编码测试 css-class 以验证我的 "custom" partial 是否被使用)。
我还尝试在 Gallery.html
-partial 中使用 arguments={_all}
(真正得到 "everything"),导致 "Oops"-错误:
提供的文件对象类型 TYPO3\CMS\Fluid\ViewHelpers\MediaViewHelper 必须是 FileInterface 或 AbstractFileFolder
我不知道我哪里出错了,也不知道如何使所需的逻辑起作用(根据内容元素的布局设置改变图像的渲染/classes/裁剪)。
正如您所注意到的,partial 仅获取 arguments 参数中提到的那些变量。如果您想评估另一个值,您需要更改部分调用并添加该值。
在您的示例中,data
已作为参数传递。但是该调用不会调用您需要 layout
值的部分。您需要进一步跟踪(并确保您的 data.layout
被传递)直到您到达对部分 Rendering/Image
提示:
如果您使用 f:debug
-tag,请始终使用 title 参数来标识调用了哪个调试标记:
<f:debug title="my-layout-value at Template X,Line Y">{data.layout}</f:debug>