Sebastian Becker: statische Variable für alternierende Zeilenhintergrundfarbe

Hallo,

ich möchte gerne über eine Funktion Tabellenzeilen mit Downloadfiles ausgeben. Die Hintergrundfarbe soll dabei bei jedem Aufruf der Funktion wechseln. Neue Tabelle sollen allerdings wieder mit der Anfangshintergrundfarbe beginnen. Leider hat das Setzen des Parameters $color keinen Einfluß auf die Hintergrundfarbe. Woran kann das liegen?

Die Funktion (vereinfacht):

function writeRow($file="",$description="",$color="")
{

if($color==""){static $color=0;}
else if($color==0){unset($color);static $color=0;}
else{unset($color);static $color=1;}

// alternating row colors
$rowcolor = ($color%2?"#F7F7F7":"#FFFFFF");

// build row
echo("<tr><td bgcolor="$rowcolor"><a href ="$file">$description</a></td></tr>");

$color++;
}

Aufruf:

writeRow("download/filename1.tgz","Description 1",0);
writeRow("download/filename2.tgz","Description 2");

Danke für alle Hinweise, Grüße,

Sebastian

  1. Hallo,

    ich möchte gerne über eine Funktion Tabellenzeilen mit Downloadfiles
    ausgeben. Die Hintergrundfarbe soll dabei bei jedem Aufruf der Funktion
    wechseln. Neue Tabelle sollen allerdings wieder mit der
    Anfangshintergrundfarbe beginnen. Leider hat das Setzen des Parameters
    $color keinen Einfluß auf die Hintergrundfarbe. Woran kann das liegen?

    Du ueberdeckst durch die lokale Variable '$color' den Parameter.

    Die Funktion (vereinfacht):

    Schreibs besser so:

    function writeRow($file,$description,$col) {
      static $color   = 0;
      static $rowcols = Array('#F7F7F7','#FFFFFF');

    if($col) {
        echo '<tr><td bgcolor="'.$col.'"><a href ="'.$file.'">'.$description.'</a></td></tr>');
      }
      else {
        echo '<tr><td bgcolor="'.$rowcols[$color++ % 2].'"><a href ="'.$file.'">'.$description.'</a></td></tr>');
      }
    }

    Gruesse,
     CK

    --
    http://sf.net/projects/libtemplate/
    http://sf.net/projects/mod-gzip/

    1. Hallo, Christian,

      vielen Dank für den Hinweis bzgl. des Überschreibens. Manchmal ist man doch betriebsblind!

      Deinen Code möchte ich so nicht verwenden, weil ich sonst meine ganze Funktion, die ich ja nur vereinfacht wiedergegeben habe, umschreiben müßte.

      Warum geht es denn nicht (im Prinzip) so?

      function writeRow($file="",$description="",$col="")
      {
      if($col==""){static $color=0;}
      else if($col==0){unset($color);static $color=0;}
      else{unset($color);static $color=1;}
      $rowcolor = ($color%2?"#F7F7F7":"#FFFFFF");
      echo("<tr><td bgcolor="$rowcolor"><a href ="$file">$description</a></td></tr>");
      $color++;
      }

      Danke, Grüße,

      Sebastian

      1. Hi,

        irgendwann, ja irgendwann wird das vielleicht auch mit CSS möglich sein...

        table tr:nth-child(odd)  { background-color:#f00; }
         table tr:nth-child(even) { background-color:#fff; }

        LG Orlando

      2. Hallo Sebastian,

        function writeRow($file="",$description="",$col="")
        {

        static $color = 0;

        // zum Resetten
        if($col == 0) {
          $color = 0;
        }

        $rowcolor = ($color++ % 2 ? "#F7F7F7":"#FFFFFF");

        echo("<tr><td bgcolor="$rowcolor"><a href ="$file">$description</a></td></tr>");

        }

        Ich hoffe, das Prinzip wird jetzt klar.

        Gruesse,
         CK

        --
        http://sf.net/projects/mod-gzip/
        http://sf.net/projects/libtemplate/