[TYPO3-german] Frage zu for-Schleife und Tags

Dr Dieter Porth typo3 at mobger.de
Sun May 10 16:42:14 CEST 2015


Am 9.5.2015 um 15:46 schrieb Manuel Bachl:
> Hallo,
>
> ich habe eine Frage bzgl. Fluid.
>
> Ich nutze Tags, welche in unterschiedlichen Sys-Ordnern hinterlegt sind.
> Bei der Ausgabe dieser Tags nutze ich eine for-Schleife und in dieser
> eine Abfrage nach der pid.
>
> Nun versuche ich die Anzahl an Tags mit der jeweils selben pid zu zählen.
>
> Mein Code bisher:
...
> Mein Ziel ist es, an der Stelle an der "Disziplinen" steht, zu
> entscheiden, ob nur eine Disziplin (Tag) hinterlegt ist, dann soll
> dort nur "Disziplin" stehen, wenn es mehr als eine ist, dann Disziplinen.
> Ich kann mit vorstellen, dass es mit einer weiteren for-Schleife
> möglich wäre, und in dieser tagCount.total zu verwenden. Doch mir ist
> die korrekte innere for-Schleife nicht ganz klar. Zudem denke ich gibt
> es einfacheren Weg.
>
> Wer kann helfen?
> Ist das überhaupt verständlich genug erklärt?
>
> Grüße
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
Hallo Manuel,

Vorschlag Ungetestet.
                               <f:for each="{newsItem.tags}" as="tag"
iteration="tagCount">
# sehr ungute if-Abfrage, denn eine PID gehört nicht in das Template.
immer per Settings oder als Fluid-Variable übergeben, wenn schon das
Template als Modell-Aufräumer auch noch überschüssige Information
auszusondern soll.
# lib.tagCounter wäre ein einfacher Counter im TypoScript
(LOAD_REGISTER) (Snippets leicht per Suchmaschine zu finden)
# Besser wäre noch, diese Abfrage im TypoScript so zu beschreiben, dass
die Schleife nur auszugebende Informationen enthält. Dann könntest du
effizient direkt auf den tagCount.total > '1' testen.
                                   <f:if condition="{tag.pid} == 43">
                                       <f:then>
                                             <li><f:if
condition="{0:'{iterator.isLast}', 1:'{f:cObject( typoscriptObjectPath:
'lib.tagCounter')}' } == {0:'1', 1:'1'}"><f:then>
                                                    <li>Disziplinen:</li>
                                                   <li class="unbordered">
                                                       <f:link.page
pageUid="{settings.backPid}"
additionalParams="{tx_news_pi1:{overwriteDemand:{tags: tag}}}">
                                                           {tag.title}
                                                       </f:link.page>
                                                   </li>
                                               </f:then>
                                               <f:else>
                                                   <li>
                                                       <f:link.page
pageUid="{settings.backPid}"
additionalParams="{tx_news_pi1:{overwriteDemand:{tags: tag}}}">
                                                           {tag.title}
                                                       </f:link.page>
                                                   </li>
                                               </f:else>
                                           </f:if>
                                       </f:then>
                                   </f:if>
                               </f:for>

Anmerkung:
Insgesamt finde ich deine Lösung suboptimal, da Sie Logik (hart
verdrahtete 43 (Pid)) und View miteinander vermischt und da sie die
Teilüberschrift "Disziplinen" aus HTML-Sicht gleichrangig wie eine echte
Information "{tag.title} " behandelt.
Auch tendiere ich dazu, jeglichen Text im HTML-Template bzw. im
TypoScript immer in Fremdsprachendateien (f:translate) auszulagern, um
in Anlehnung an das MVC-Prinzip in einer TYPO3-Aufsetzung die Logik, die
Darstellung und die Inhalte möglichst sauber getrennt zu halten.

Dieter


-- Dr. Dieter Porth
- Mein kleines TYPO3-Labor: http://www.mobger.de/


More information about the TYPO3-german mailing list