LiveAndSmile: if - else

Hallo,

lässt sich dieses auch etwas kürzer schreiben?

<?php if($holeDaten->layout == "raster"): ?>
	<a class="aktuell" href="<?php echo $_SERVER['PHP_SELF']; ?>?layout=raster">Raster</a> - <a href="<?php echo $_SERVER['PHP_SELF']; ?>?layout=liste">Liste</a>
<?php else: ?>
	<a href="<?php echo $_SERVER['PHP_SELF']; ?>?layout=raster">Raster</a> - <a class="aktuell" href="<?php echo $_SERVER['PHP_SELF']; ?>?layout=liste">Liste</a>
<?php endif; ?>

Habe solche Abfragen an mehreren Stellen und es macht meinen Code doch sehr unübersichtlich.

  1. Hey,

    Wie wärs damit?

    <a
    <?php if($holeDaten->layout == "raster"): ?>
    	class="aktuell"	
    <?php endif; ?>
    href="<?php echo $_SERVER['PHP_SELF']; ?>?layout=raster">Raster</a> - <a class="aktuell" href="<?php echo $_SERVER['PHP_SELF']; ?>?layout=liste">Liste</a>
    

    Gruß
    Jo

  2. hi,

    Habe solche Abfragen an mehreren Stellen und es macht meinen Code doch sehr unübersichtlich.

    Dann guck doch mal, ob das mit einer richtigen Template-Engine übersichtlicher wird -- davon bin ich überzeugt.

    MfG

  3. Tach!

    lässt sich dieses auch etwas kürzer schreiben?

    Mit Inline-Ifs (sprich: ternärer Operator) wird es nicht kürzer.

    Ich sehe aber, dass es sowieso noch zu kurz ist. Es fehlen htmlspecialchars()-Aufrufe bei den echos.

    Solange da nicht noch ein <pre> oder vergleichbares mitspielt, kannst du zumindest nach den Bindestrichen eine neue Zeile beginnen, also das zweite a-Element auf eine eigene Zeile setzen.

    Statt <?php echo kannst du <?= nehmen, wenn die PHP-Version nicht zu alt ist.

    dedlfix.

    1. Hallo,

      danke für deine Antwort

      Ich sehe aber, dass es sowieso noch zu kurz ist. Es fehlen htmlspecialchars()-Aufrufe bei den echos.

      Upp habe ich total vergessen, hab es nachgeholt

      <?php if($object->layout == "raster"): ?>
         <a class="aktuell" href="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>?layout=raster">Raster</a> - 
         <a href="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>?layout=liste">Liste</a>
      <?php else: ?>
         <a href="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>?layout=raster">Raster</a> - 
         <a class="aktuell" href="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>?layout=liste">Liste</a>
      <?php endif; ?>
      

      Statt <?php echo kannst du <?= nehmen, wenn die PHP-Version nicht zu alt ist.

      Ich habe PHP 7 im Einsatz. All-Inkl hat geraten wenn ich etwas neues mache direkt auf die aktuelle umzusteigen und nichts altes mehr verwenden da die alten Versionen der Reihe nach abgeschalten werden.

  4. Hallo LiveAndSmile,

    <?php $attr_href = "href=" . $_SERVER['PHP_SELF'] . "?layout=" . $holeDaten->layout; ?> 
    <?php if ($holeDaten->layout == "raster") : ?>
    	<a>Raster</a> - <a <?=$attr_href?>>Liste</a>
    <?php else: ?>
    	<a <?=$attr_href?>>Raster</a> - <a>Liste</a>
    <?php endif; ?>
    

    und die Klasse brauchst du nicht, denn du kannst zwischen a und a[href] unterscheiden. Das hat zudem den Vorteil, dass sich der Link, der grade aktuell ist, nicht klicken lässt.

    Bis demnächst
    Matthias

    --
    Dieses Forum nutzt Markdown. Im Wiki erhalten Sie Hilfe bei der Formatierung Ihrer Beiträge.
    1. @@Matthias Apsel

      <?php $attr_href = "href=" . $_SERVER['PHP_SELF'] . "?layout=" . $holeDaten->layout; ?> 
      

      Auf das fehlende htmlspecialchars() hat dedlfix ja schon hingewiesen.

      Fehlen nicht auch Anführungszeichen? (" oder ', nicht richtige.) Ist denn sichergestellt, dass $_SERVER['PHP_SELF'] . "?layout=" . $holeDaten->layout nur Zeichen enthält, bei denen der Attributwert in HTML nicht in Anführungszeichen stehen muss?

      LLAP 🖖

      --
      „Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.“ —Johann Wolfgang von Goethe