2017-09-01 3 views
0

Je Contentelments l'alimentation dans une extension à l'aide du fluide:Typo3 Fluide: Ajouter une classe à l'élément si elle est d'abord

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

qui fonctionne très bien.

éléments ressemblent à ceci:

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

Les éléments sont ensuite affichés d'une certaine manière.

Maintenant, je veux le premier élément d'avoir une classe supplémentaire appelée « premier ». Le premier élément serait alors ressembler à ceci:

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

J'ai essayé résoudre ce en utilisant un itérateur et de vérifier simplement si le iterator « isFirst ». Quelque chose comme ceci:

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

Mais je dois encore insérer la classe et il se sent de toute façon, comme il doit y avoir une meilleure façon de le résoudre. Est-ce que quelqu'un peut me pointer vers la bonne direction?


Edit (Solution):

La réponse acceptée a fonctionné pour moi après que je l'ai fait la "<div class="childElement">" encartoucher dans l'extension plutôt que dans l'enfant. Ma solution ressemble à ceci maintenant:

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

Répondre

2

Vous pouvez simplement utiliser la version en ligne du f:if viewhelper pour éviter de se répéter dans un <f:then> -><f:else> construction:

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

Puisque vous ne pas Dans un autre cas, vous pouvez simplement le laisser tomber. Selon la version fluide, vous devrez peut-être pour envelopper votre expression de condition avec des accolades plus bouclés, comme ceci:

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

Mais cela ne devrait pas être nécessaire (bien que cela fonctionne).

+0

Wow c'était rapide! Et a travaillé. (Bien que je devais envelopper l'enfant avant de le rendre, mais puisque je peux juste changer l'enfant ce ne sera pas un problème et est probablement "meilleure pratique" de toute façon ...) Merci! – Simon