statische Variable für alternierende Zeilenhintergrundfarbe
Sebastian Becker
- php
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
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/
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
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
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/