TYPO3 8 Fluid_styled_content:在图像部分

时间:2018-01-23 23:14:04

标签: typo3 typo3-8.x fluid-styled-content

基本上我想使用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

我不知道哪里出错了以及如何使所需的逻辑工作(根据内容元素的布局设置改变图像的渲染/类/裁剪)。

1 个答案:

答案 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>