<f:for> verschachteln mit <f:if> ?

  • Naderio Naderio
    T3PO
    0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    30. 03. 2011, 22:07

    Hallo,

    ich schreibe grad für meine Abschlussprüfung eine Bilderweiterung. Schreibe mir im Moment die Templates zusammen und stecke jetzt an einer Verschachtelung fest:

    1. <f:for each="{galerieDaten.bilder}" as="bild">
    2. <div class="galleryImage">
    3. <a href="fileadmin/Bilder/{bild.datei}">
    4. <img src="fileadmin/Bilder/{bild.datei}" alt="{f:if(condition: bild.altTag)}" />
    5. </a>
    6. <p class="imagetext">
    7. <f:if condition="{bild.titel}">
    8. <span class="imageTitle">{bild.titel}</span>
    9. </f:if>
    10. <f:if condition ="{bild.beschreibung}">
    11. <span class="imageDescription">{bild.beschreibung}</span>
    12. </f:if>
    13. </p>
    14. </div>
    15. </f:for>

    Ich habe ein array {bild} und will mir zu jedem einen Titel und eine Beschreibung ausgeben WENN vorhanden.

    wenn ich die beiden if-Abfragen raus nehme dann klappt es:

    1. <f:if condition="{bild.titel}">
    2. <span class="imageTitle">{bild.titel}</span>
    3. </f:if>
    4. <f:if condition ="{bild.beschreibung}">
    5. <span class="imageDescription">{bild.beschreibung}</span>
    6. </f:if>

    allerdings bekomme ich eine Fehlermeldung wenn ich die Abfragen drin habe...

    Hab ich da einen Denkfehler, oder geht das einfach im Moment noch nicht?

    Fehlermeldung:
    Templating tags not properly nested. Expected: Tx_Fluid_ViewHelpers_ForViewHelper; Actual: Tx_Fluid_ViewHelpers_IfViewHelper

    MfG

    Thomas


  • 1
  • Naderio Naderio
    T3PO
    0 x
    9 Beiträge
    0 Hilfreiche Beiträge
    30. 03. 2011, 22:12

    Ach verdammt bin ich blöd...#angry#

    Ich habe es jetzt mit Inline-Notation gelöst. So funktioniert es!
    Wen es interessiert:

    1. <span class="imageTitle">{f:if(condition: bild.titel, then: bild.titel)}</span>

    Falls schon jemand drüber nachgedacht haben sollte, vielen Dank dafür #paralyzed#

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    14. 03. 2013, 09:19

    Hallo,

    zwar verstehe ich nicht, was hier als Problemlösung gemeint ist,
    (ich verstehe auch diese inline-Notation nicht so ganz)
    allerdings hat das Problem mit der Notation nichts zu tun.

    Die Fehlermeldung: Templating tags not properly nested. ...
    erscheint weil der <f:then> im <f:if> fehlt,
    also nicht so:

    1. <f:if condition="{foo}">
    2. {bar}
    3. </f:if>

    sondern:

    1. <f:if condition="{foo}"><f:then>
    2. {bar}
    3. </f:then><f:else>
    4. {baz}
    5. </f:else></f:if>

    Gruß Harald

  • karf karf
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    15. 03. 2013, 14:02

    [quote="harald1972"]
    Hallo,

    zwar verstehe ich nicht, was hier als Problemlösung gemeint ist,
    (ich verstehe auch diese inline-Notation nicht so ganz)
    allerdings hat das Problem mit der Notation nichts zu tun.

    Die Fehlermeldung: Templating tags not properly nested. ...
    erscheint weil der <f:then> im <f:if> fehlt,
    also nicht so:

    1. <f:if condition="{foo}">
    2. {bar}
    3. </f:if>

    sondern:

    1. <f:if condition="{foo}"><f:then>
    2. {bar}
    3. </f:then><f:else>
    4. {baz}
    5. </f:else></f:if>

    Gruß Harald
    [/quote]

    Das ist nicht korrekt. Sofern du keinen else-Fall brauchst funktioniert

    1. <f:if condition="{foo}">
    2. {bar}
    3. </f:if>

    genauso gut.
    das <f:then> brauchst du nur wenn du then und else unterscheiden musst.
    selbst ein
    1. <f:if condition="{foo}">
    2. <f:else>
    3. {bar}
    4. </f:else>
    5. </f:if>

    funktioniert. (ist identisch mit einem unless bzw. if not)

    Warum das Ursprüngliche HTML von Naderio nicht funktioniert sehe ich aber gerade auch nicht.

  • kainobi kainobi
    Jedi-Ritter
    0 x
    141 Beiträge
    0 Hilfreiche Beiträge
    15. 03. 2013, 14:42

    karf hat recht, am fehlenden <f:then> kann es nicht liegen. Evt. liegt es aber am img-Tag:

    1. <img src="fileadmin/Bilder/{bild.datei}" alt="{f:if(condition: bild.altTag)}" />

    Hier scheint mir die inline-if-condition unvollständig zu sein. Warscheinlich wird dadurch der Fehler verursacht.

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    15. 03. 2013, 15:01

    Danke fürs Berichtigen :o

    am fehlenden <f:then> liegts wohl nicht. Zumindest nicht an der Stelle.
    Aber wie kainobi sagt: der inline-if ist unvollständig. Er hat eine Condition, aber kein 'then'.
    In Naderios eigener Lösung vom 21.03.2011 steht 'then' drin.

  • karf karf
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    15. 03. 2013, 15:14

    Nope daran liegt es definitiv nicht.

    {f:if(condition: bild.altTag)} ist ein vollständiger Viewhelper, nur die Condition ist ein Pflichtfeld. (Sinn macht es natürlich wenig)

    Ich habes jetzt mal ausprobiert, der Fehler lag am Leerzeichen nach dem condition des letzten if-viewhelpers

    Also Original:

    1. <f:if condition ="{bild.beschreibung}">
    2. <span class="imageDescription">{bild.beschreibung}</span>
    3. </f:if>

    Korrekt:

    1. <f:if condition="{bild.beschreibung}">
    2. <span class="imageDescription">{bild.beschreibung}</span>
    3. </f:if>

    Ich bin mir nicht 100% Sicher wie es im XML Standard ist, aber ich denke das dies wohl ein Bug im Fluid Parser ist ...

  • kainobi kainobi
    Jedi-Ritter
    0 x
    141 Beiträge
    0 Hilfreiche Beiträge
    19. 03. 2013, 08:33

    Interessant! Thx für die Korrektur! :-)

  • 1