Homer: Funktion mit IF-Anweisung

Hallo Forum,

ich habe eine PHP Funktion die mir einen funktionieren Link in HTML ausgibt:

PHP im Quellcode:
<?php print(get_styleswitch_link('2', '9', 'w', 'foo', 'aktiv', 'bar'));?>

HTML im Browser:
<a accesskey="2" tabindex="9" href="/index.php?styles=w" title="foo" onClick="cookies_pruefen()"><span class="aktiv">bar</span></a>

soweit sogut!

Ich möchte jetzt jetzt aber die css Klasse "aktive" nur dann setzen, wenn ein bestimmtes Stylesheet genutzt wird. Ich dachte ich könnte einfach eine IF-Anweisung in mein PHP Schnipsel schreiben:

<?php print(get_styleswitch_link('2', '9', 'w', 'foo', '<?php if (($css_name == 's') || ($css_name == 'w')) { print 'aktiv';}?>', 'bar'));?>

ABER falsch gedacht: Parse error: syntax error, unexpected T_STRING in ...

An der PHP Funktion kann es immo nicht liegen, die funktioniert sonst einwandfrei, und auch die IF-Abfragen bezüglich des Stytsheets funtionieren sonst super. Nur in der Kombination kommt der syntax error, weil ich ein PHP Dau bin...

Wäre schon wenn jemand mich auf den rechten Pfad (zurück) bringen könnte.

Grüße und Danke
Homer
PS: D'oh!

  1. Hi,

    <?php print(get_styleswitch_link('2', '9', 'w', 'foo', '<?php if (($css_name == 's') || ($css_name == 'w')) { print 'aktiv';}?>', 'bar'));?>

    Probiers mal so:

    <?php  
    if (($css_name == 's') || ($css_name == 'w')) {  
      $css_klasse= 'aktiv';  
    }  
    print(get_styleswitch_link('2', '9', 'w', 'foo', $css_klasse, 'bar'));  
    ?>
    

    MfG
    Napster

  2. Hallo,

    <?php print(get_styleswitch_link('2', '9', 'w', 'foo', 'aktiv', 'bar'));?>
    <?php print(get_styleswitch_link('2', '9', 'w', 'foo', '<?php if (($css_name == 's') || ($css_name == 'w')) { print 'aktiv';}?>', 'bar'));?>

    Der Denkansatz ist okay, aber du kannst if nicht so schachteln und schon gar nicht <?php im <?php ...

    Probier mal dieses:
    ... 'foo', ($css_name == 's') || ($css_name == 'w')?'aktiv':'passiv', 'bar' ...

    Der alte Eintrag 'aktiv' wird durch eine Bedingung ersetzt. Nach ? kommt der TRUE-Wert, nach : der FALSE-Wert.

    Schorsch

    1. sorry, Klammerfehler. Die gesamte Bedingung muss in () eingeschlossen sein.

      so habe ich es gemeint:

      ... 'foo', ($css_name == 's' || $css_name == 'w')?'aktiv':'passiv', 'bar' ...

      1. sorry, Klammerfehler. Die gesamte Bedingung muss in () eingeschlossen sein.

        so habe ich es gemeint:

        ... 'foo', ($css_name == 's' || $css_name == 'w')?'aktiv':'passiv', 'bar' ...

        Yes you can ! ;)

        Danke, so gehts super

        Gruß
        Homer

      2. Hi!

        sorry, Klammerfehler. Die gesamte Bedingung muss in () eingeschlossen sein.
        so habe ich es gemeint:
        ... 'foo', ($css_name == 's' || $css_name == 'w')?'aktiv':'passiv', 'bar' ...

        Die Klammern schaden nicht, aber gemäß der Operatoren-Rangfolge sind sie in dem Fall nicht notwendig. Sowohl der Vergleich als auch die Verknüpfung mit || haben eine höhere Priorität als ?: Was anderes wäre es, wenn du or statt || genommen hättest, das kommt erst nach dem ?: und ergäbe am Ende ein boolsches Ergebnis, nämlich stets true, weil es wie folgt gelöst würde:

        ($css_name == 's') or (($css_name == 'w') ? 'aktiv' : 'passiv')

        Bei $css_name == 's' kommt entweder true oder false raus, aber der zweite Teil liefert mit 'aktiv' oder 'passiv' immer einen Wert, der im boolschen Kontext zu true gecastet wird. Somit wäre das Ergebnis immer true.

        Lo!