Fluid If-Condition und String-Vergleich

Leider kann der Fluid-ViewHelper keine Strings vergleichen. Ich habe ein wenig recherchiert und Lösungen gefunden.

Die erste ist ein eigener View Helper, der in der Lage ist, zwei Objekte (Strings z.B.) zu vergleichen.

<?php
 
class Tx_MyExt_ViewHelpers_CompareViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
 
    /**
     * Returns true if $a and $b are type-equal, false otherwise.
     *
     * @param mixed $a
     * @param mixed $b
     * @return boolean
     */
    public function render($a, $b) {
        return $a === $b;
    }
}
 
?>

Dann soll es laut dem Eintrag so funktionieren:

<f:if condition="{myext:compare(a: 'foo', b: 'bar')}">
  <f:then>...</f:then>
  <f:else>...</f:else>
</f:if>

Leider hat es bei mir nicht funktioniert.

Aber der Vorschlag zwei hat hingegen funktioniert. Es wird mit Fluid ein Alias für den zu vergleichenden String defininiert und dann verglichen:

<f:alias map="{foobar: 'myString'}">
<f:if condition="{object.property} ==  {foobar}"><!-- do something --></f:if>
</f:alias>

7 Kommentare

  1. Hallo Natalia,

    oder als Array verpacken – dann kannst Du Dir den Alias sparen :

    <f:if condition="{0:object.property} == {0:'value'}">
    <!-- do something -->
    </f:if>

    Patrick

  2. Finde die Array-Methode von Patrick Lobacher am schnellsten und einfachsten… habe mich innerlich stark dagegen gewehrt, einen eigenen Viewhelper dafür zu schreiben.

  3. Natalias Variante #2 will bei mir leider nicht. Fluid springt immer auf die Condition um. Ich vergleiche allerdings nicht eine Objekteigenschaft, sondern einen selbst im Controller zugewiesenen String.