带有DCE的自定义内容元素中的单个文件

时间:2016-11-20 20:14:37

标签: php typo3 fluid typo3-7.6.x

我为自定义内容元素安装了DCE。

我想要有条件地包含文件名的第一个div标签。这应该做到,但它没有 - 为什么?

  <f:if condition="{f:count(subject: {dce:fal(field:'bgImage', contentObject:contentObject)})}==1">
      <f:then>

        <f:for each="{dce:fal(field:'image', contentObject:contentObject)}" as="fileReference" iteration="iterator">
            <f:if condition="{iterator.isFirst}">
                <div class="element slide vertical-center picture{f:if(condition: '{field.isWhite} == 1', then: ' white')}" img-fill="{f:uri.image(src:'{fileReference.uid}',treatIdAsReference:'1')}" selectable>
            </f:if>
        </f:for>

    </f:then>
    <f:else>

        <div class="element slide vertical-center{f:if(condition: '{field.isWhite} == 1', then: ' white')}" selectable>

    </f:else>  
  </f:if>

我需要什么:

我在DCE中定义了一个FAL属性,如果设置了一个文件,那么&#39; div&#39;应该是

<div class="element slide vertical-center picture" img-fill="FILEPATH" selectable>

如果不是,那么

<div class="element slide vertical-center" selectable>

我没有找到比这种结构更好的netter解决方案:

<f:for each="{dce:fal(field:'image', contentObject:contentObject)}" as="fileReference" iteration="iterator">
    <f:if condition="{iterator.isFirst}">
        <!-- render image by fileReference -->
    </f:if>
</f:for>

我已经找到了内联符号

{f:if(condition:'{filepath} != EMTPY',then:' picture')}

但是如何检查流体中的EMPTY?

{f:if(condition:'{filepath}',then:' picture')}

当我在评论中正确理解Urs时。

我想念什么?

3 个答案:

答案 0 :(得分:0)

所以,你可能会尝试这样的事情(我猜):

<div class="..." img-fill="<f:if condition="{dce:fal(field:'image', contentObject:contentObject)}">
      <f:image image="{dce:fal(field:'image', contentObject:contentObject).0}" />
  </f:if>
  </f:for>">
 ... further content ...
</div>

答案 1 :(得分:0)

尝试这样的事情,这对我有用。

  <f:for each="{dce:fal(field:'fal', contentObject:contentObject)}" as="fileReference" iteration="iterator">
    <div class="element slide vertical-center {f:if(condition:'{fileReference.uid}',then:' picture')}">
            <f:image src="{fileReference.uid}" alt="" treatIdAsReference="1" />
    </div>
</f:for>

答案 2 :(得分:0)

我找到了一个&#34;解决方案&#34;靠我自己:

<? if (count($image_references) == 1): ?>

  <div class="element slide vertical-center picture" img-fill-src="/fileadmin<? echo $file_references[0].originalFile.identifier; ?>">

<? else: ?>

  <div class="element slide vertical-center">

<? endif; ?>

</div>
真是一团糟。与PHP方法比较:

{{1}}

使用这种Fluid材料会产生极大的开销,因为毕竟你需要一个解析Fluid材料的解析器。这个解析器再次用PHP编写,并且在整个前端执行muss。这意味着必须缓存所有内容。但是再次缓存并不好。代码更容易。如果你学会流动,你就不能在不像PHP的地方应用它。

这个&#34;流体&#34; - 系统真是个坏主意!