【问题标题】:Typo3 Fluid: Add Class to Element if it is FirstTypo3 流体:如果是第一个,则将类添加到元素
【发布时间】:2018-02-10 13:26:32
【问题描述】:

我正在使用 Fluid 将 Contentelments 输入到扩展中:

<f:for each="{field.children}" as="myObj" iteration="iterator">
  {myObj.render -> f:format.raw()}
</f:for>

这工作正常。

元素看起来像这样:

<div class="childElement">
  <h1>I'm a Caption!</h1>
  <p>I'm some text.....</p>
</div>

元素然后以某种方式显示。

现在我希望第一个元素一个额外的类,称为“first”。然后第一个元素看起来像这样:

<div class="childElement first">
  <h1>I'm a Caption!</h1>
  <p>I'm some text.....</p>
</div>

我尝试使用迭代器来解决这个问题,并简单地检查迭代器是否“isfirst”。像这样的:

<f:for each="{field.children}" as="myObj" iteration="iteration">
 <f:if condition="iteration.isFirst">
    <f:then>
     ...

但是我仍然需要插入这个类,无论如何感觉必须有更好的方法来解决它。

有人可以指出我正确的方向吗?


编辑(解决方案):

在我将"&lt;div class="childElement"&gt;" 包裹在扩展中而不是在子中之后,接受的答案对我有用。 我的解决方案现在看起来像这样:

<f:for each="{field.children}" as="myObj" iteration="iterator">
  <div class="childElement {f:if(condition:iterator.isFirst, then: ' first')}">
     {childDce.render -> f:format.raw()}
   </div>
</f:for>

【问题讨论】:

  • 不起作用,因为您需要在此处使用花括号:condition=“{….}”

标签: typo3 fluid


【解决方案1】:

您可以简单地使用 f:if viewhelper 的内联版本来避免在 &lt;f:then&gt; -> &lt;f:else&gt; 构造中重复自己:

<f:for each="{field.children}" as="myObj" iteration="iter">
    <div class="childElement{f:if(condition:iter.isFirst, then: ' first')}">

由于您没有 else 案例,您可以直接放弃它。 根据您的流体版本,您可能需要用更多的花括号来包裹您的条件表达式,如下所示:

<f:for each="{field.children}" as="myObj" iteration="iter">
    <div class="childElement{f:if(condition: '{iter.isFirst}', then: ' first')}">

但这不应该是必要的(尽管它有效)。

【讨论】:

  • 哇,真快!并且工作了。 (虽然我必须在渲染之前包裹孩子,但因为我可以改变孩子这不会是一个问题,并且可能是“更好的做法”无论如何......)谢谢!
猜你喜欢
  • 2019-01-16
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 2019-01-29
  • 2020-02-17
  • 1970-01-01
相关资源
最近更新 更多