WordPress, PHP, JavaScript, Web 2.0, Gaming, Fotografie, Piratenpartei, Schießsport, Privates

Per RegEx geraden und ungeraden Tabellen-Zeilen ensprechende CSS-Klassen zuweisen

Mi 23 Dez. 09 # Permalink

Wer vor dem Problem steht, dass ein Kunde bei einer Web-Anwendung unbedingt Tabellen-Zeilen mit wechselnden Farben je gerader und ungerader Zeile wünscht und dafür ca. 200 Kilobyte Quellcode überarbeiten müsste, der kann es sich ein wenig vereinfachen, wenn folgender Code vor der Ausgabe auf den auszugebenden Inhalt angewendet wird.

Das Skript durchsucht mit zwei kleinen Regular Expressions den Inhalt nach Tabellen und weist dann den Tabellen-Zeilen entsprechende Klassen (even/odd) zu. So können alle Tabellen per CSS formatiert werden. Klar leidet darunter die Performance etwas, aber sicherlich nicht viel mehr, als wenn ich in jeder Schleife in der eine Tabelle aufgebaut wird ein Zähler mitlaufen lasse und eine Bedingsabfrage mache.

	// Convert table rows to even/odd class
	preg_match_all( "/<table.*>(.*)<\/table>/siU", $html, $matches );
	if( $matches )
	{
		foreach( $matches[ 1 ] AS $tbody )
		{
			$new_rows = '';
			if( preg_match_all( "/<tr.*>.+<\/tr>/siU", $tbody, $tbmatches ) )
			{
				$i = 0;
				foreach( $tbmatches[ 0 ] AS $tr )
				{
					// Ignore rows containing th cells
					if( strpos( $tr, '<th' ) === false )
					{
						if( $i % 2 == 0 )
							$new_rows .= str_replace( '<tr', '<tr class="even"', $tr );
						else
							$new_rows .= str_replace( '<tr', '<tr class="odd"', $tr );
						$i++;
					}
					else	$new_rows .= $tr;
				}
				$html = str_replace( $tbody, $new_rows, $html );
			}
		}
	}

Im Grunde ganz einfach: Die erste RegEx sucht alle vorhanden Tabellen und deren Inhalt. Danach werden die Zeilen des Inhalts ebenfalls per RegEx ermittelt und per Zeichenersetzung angepasst.

Vielleicht hilft das ja Jemandem irgendwann mal…

Willst du die Kommentare dieses Beitrags verfolgen, kannst du den Kommentar Feed abonnieren. Du kannst auch selbst einen Kommentar hinzufügen, oder einen Trackback von deiner eigenen Seite senden.

4 Kommentare zu “Per RegEx geraden und ungeraden Tabellen-Zeilen ensprechende CSS-Klassen zuweisen”

  1. mømø sagt:

    Wozu einen Zähler? Wenn würde ich das in etwa so ablaufen lassen:
    $even = 0;
    foreach(@row) {
    print $even ? ” : ”;
    $even = !$even;
    […]
    }

    Ich glaube, alleine das matchen einer regexp ist aufwändiger als das bisschen Code oben ;)

  2. Marc sagt:

    Ich zitiere mich mal selber: “und dafür ca. 200 Kilobyte Quellcode überarbeiten müsste”

    Das Problem war, dass es erst NACHTRÄGLICH implementiert werden sollte. Und dafür hätten dann alle Ausgaben überarbeitet werden müssen… da war die RegEx wesentlich einfacher…

  3. Chris sagt:

    Man hätte es auch einfach per JS/CSS machen können, :even und :odd selektoren funktionieren in CSS3 und sind in jQuery und vermutlich (dank Sizzle) auch in MooTools verfügbar…

  4. Marc sagt:

    Ja, musste leider auch mit dem IE kompatibel sein, daher konnte ich :even und :odd nicht nehmen. Ist ja auch schon ein bischen was her der Beitrag.

Hinterlasse einen Kommentar

Name (Pflichtangabe)

E-Mail, wird NIEMALSNICHT veröffentlicht! (Pflichtangabe)

Webseite

Dein Kommentar