Tabellenzeilen in unterschiedlichen Farben in PHP
Ben
- php
Hi alle zusammen!
Ich arbeite zur Zeit an einem Filme-Archiv und möchte die "Cast und Crew" auf einer eigenen Seite darstellen. Diese werden aus einer Datenbank geladen und sind alle zusammen im Feld "cast_crew" gespeichert.
Diese sollen in Tabellenzeilen getrennt werden. Also zuerst die Regisseure, dann die Schauspieler in der nächsten Zeile usw.
Wie mache ich das, dass nur jede zweite Zeile eine andere Farbe hat? Also dass Zeile 1 hell, Zeile 2 dunkel und Zeile 3 wieder hell ist, wenn ich mit CSS Klassen vergeben möchte?
Hat jemand eine Idee?
Danke und liebe Grüße
Ben
Hallo,
Wie mache ich das, dass nur jede zweite Zeile eine andere Farbe hat? Also dass Zeile 1 hell, Zeile 2 dunkel und Zeile 3 wieder hell ist, wenn ich mit CSS Klassen vergeben möchte?
der Modulo-Operator hilft Dir.
Freundliche Grüße
Vinzenz
echo $begrüßung;
Wie mache ich das, dass nur jede zweite Zeile eine andere Farbe hat? Also dass Zeile 1 hell, Zeile 2 dunkel und Zeile 3 wieder hell ist, wenn ich mit CSS Klassen vergeben möchte?
der Modulo-Operator hilft Dir.
Konkret geht das so: Man nehme eine Variable, die man bei der Ausgabe einer Zeile hochzählt. Beim Teilen durch zwei entsteht ein Rest oder keiner. Davon abhängig setzt man nun die hell- oder dunkel-Eigenschaft.
Alternativ kann man bei zwei wechselnden Eigenschaften auch das rechte Bit testen, denn das wechselt ebenfalls bei jedem Inkrement-Schritt:
$zaehler & 1
ergibt 0 oder 1.
Oder man merkt sich einfach den vorherigen Zustand als booleschen Wert und ändert diesen jeweils in den anderen, beispielsweise mit einer Negation.
echo "$verabschiedung $name";
Konkret geht das so: Man nehme eine Variable, die man bei der Ausgabe einer Zeile hochzählt. Beim Teilen durch zwei entsteht ein Rest oder keiner. Davon abhängig setzt man nun die hell- oder dunkel-Eigenschaft.
Das kann dann so aussehen:
$i=0;
[START] Ausgabe
class="$i%1 === 1 ? hell : dunkel
"
$i++
[ENDE] Ausgabe
Hallo,
Konkret geht das so: Man nehme eine Variable, die man bei der Ausgabe einer Zeile hochzählt. Beim Teilen durch zwei entsteht ein Rest oder keiner. Davon abhängig setzt man nun die hell- oder dunkel-Eigenschaft.
Das kann dann so aussehen:
$i=0;
[START] Ausgabe
class="$i%1 === 1 ? hell : dunkel
"
$i++
[ENDE] Ausgabe
Nein, nicht so. Auch wenn ich nicht verstehe, was das zwischen [START] Ausgabe und [ENDE] Ausgabe genau sein soll, sind da viel zu viele Fehler drin:
// Initialisiere den Zähler für die Zeilen
// Anfangswert: 1, damit Code leichter verständlich.
$zeile = 1;
// [...]
// Ermittle die zuzuweisende Klasse
// hell und dunkel sind keine gute Klassennamen.
$rowclass = ($zeile % 2 == 0) ? 'gerade' : 'ungerade';
// Erhöhe den Zeilenzähler
// Anmerkung: Ich weiß, dass man dies als Postinkrement in die vorherige
// Codezeile packen könnte. Ich halte dies für eine wenig
// verständliche Mikrooptimierung, die ich bewußt vermeide,
// um lesbareren und damit wartbareren Code zu schreiben.
$zeile++;
// tu was mit dem Klassennamen
// [...]
Freundliche Grüße
Vinzenz
echo $begrüßung;
- der normale Vergleichsoperator ist völlig ausreichend (Notice :-) )
$rowclass = ($zeile % 2 == 0) ? 'gerade' : 'ungerade';
Man kann sogar den Vergleich ganz weglassen. Der Rest einer Division durch 2 ist immer 0 oder 1, was durch PHPs automatische Typumwandlung in den Boolean-Kontext zu false oder true wird. Der Vergleich mit der 0 dreht nur noch zusätzlich die Logik um, was man aber durch eine Änderung der Reihenfolge der beiden Strings auch hinbekommt.
echo "$verabschiedung $name";
[latex]Mae govannen![/latex]
echo $begrüßung;
- der normale Vergleichsoperator ist völlig ausreichend (Notice :-) )
$rowclass = ($zeile % 2 == 0) ? 'gerade' : 'ungerade';Man kann sogar den Vergleich ganz weglassen. Der Rest einer Division durch 2 ist immer 0 oder 1, was durch PHPs automatische Typumwandlung in den Boolean-Kontext zu false oder true wird. Der Vergleich mit der 0 dreht nur noch zusätzlich die Logik um, was man aber durch eine Änderung der Reihenfolge der beiden Strings auch hinbekommt.
Man kann auch den aufwendigen Modulo-Operator ganz weglassen und z.B. mit einer Variable (bool) arbeiten, die man einfach bei jedem Durchlauf negiert.
$ist_gerade = false;
[start schleife]
$rowclass = ($ist_gerade) ? 'gerade' : 'ungerade';
$ist_gerade = !ist_gerade;
[/ende schleife]
Wobei man die zweite Klasse ebenfalls noch einsparen kann, bei zwei Farbzuständen wird nur eine Klasse benötigt.
Cü,
Ist bei diesem Code $i=0; überhaupt notwendig?
Es funktioniert auch ohne, kann aber auch an meinen Einstellungen liegen.
Ok, hat sich erledigt. das erzeugt bei reporting all einen Fehler.
echo $begrüßung;
Ok, hat sich erledigt. das erzeugt bei reporting all einen Fehler.
Der lesende Zugriff auf nicht initialisierte Variablen ist aus PHP-Sicht kein Fehler sondern nur eine Notiz wert, es ist noch nicht mal eine Warnung. Aus Anwendungssicht kann das aber fatale Folgen haben. Man könnte übersehen haben, dass man diese Variable in einam vorhergehenden Programmteil schon einmal verwendet hat, dann hat man da einen anderen Wert drinstehen und bekommt nicht nur das übliche null. Im Zusammenhang mit register_globals=On besteht auch die Möglichkeit, dass jemand durch einen ungewünscht gesetzten GET/POST/Cookie-Parameter die Variablen vorbelegt.
Es ist immer eine gute Idee, Variablen definiert zu initialisieren, auch wenn das auf den ersten Blick als nicht notwendig erscheint.
echo "$verabschiedung $name";