1

基本上,我想使用 TYPO3 中内容元素的“布局”值来实现不同的图像渲染:例如,一个名为“圆形图像”的布局,将渲染的内容元素的所有图像裁剪成一个正方形,也许还有一些额外的css 级。

CSC-time of courde 中使用的snipplets 不适用于新的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.htmlI中的 -value得到 的期望值{data.layout},例如使用

<f:debug title="my-layout-value">{data.layout}</f:debug>

实际图像的渲染由以下f:renderviewhelper-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}then 的内容突然是 just NULL,所以没有机会使用我的布局值。图像部分的其余部分保持不变,图像照常渲染(包括一些硬编码的测试 css 类来验证我的“自定义”部分是否被使用)。

我还尝试arguments={_all}Gallery.html-partial 中使用(真正获得“一切”),导致“糟糕”-错误: 提供的文件对象类型 TYPO3\CMS\Fluid\ViewHelpers\MediaViewHelper must be FileInterface or AbstractFileFolder

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

4

1 回答 1

3

正如您所注意到的,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>
于 2018-01-24T08:38:27.620 回答