Mit PHP Klassen nach dem nth-child-Prinzip vergeben

Es könnte alles so einfach sein wenn da nicht der IE wäre, der bis einschließlich Version 8 nichts von der CSS Pseudoklasse :nth-child weiß. Ich versuche inzwischen, das weitgehend zu ignorieren solange es sich um Schönheitsfehler handelt und nicht um elementare Gestaltungsprobleme. Für den zweiten Fall habe ich mir eine PHP-Klasse geschrieben, die im Template den HTML-Elementen nach der Nth-Child-Syntyx eine Klasse verpasst um diese Elemente mit dem Klassenselektor anzusprechen. Gibt es bestimmt schon in hundert-facher Ausführung, aber ich hatte gerade mal Lust auf ein klein wenig Mathe.

Das ganze funktioniert dann so:

<?php
# alle außer den ersten 4
$n = new Nth_Child_Class( '-n+4', 'greater-than-four' );
?>
<ul>
<?php for ( $i = 1; $i <= 10; $i++; ) : ?>
	<li class="<?php $n->print_class(); ?>">…</li>
<?php endfor; ?>
</ul>

Es  lässt sich z.B. auch auf Wordpress-Posts anwenden, wenn man die Klasse um zwei Methoden ergänzt:

/**
 * applied to the wp filter 'post_class'
 *
 * @param array $classes
 * @param string $class
 * @param int $post_id
 * @return array
 */
public function wp_get_class( $classes, $class, $post_id ) {

	$nth_class = $this->get_class();
	if ( '' !== $nth_class )
		$classes[] = $nth_class;

	return $classes;
}

/**
 * clean up
 */
public function __destruct() {
	remove_filter( 'post_class', array( $this, 'wp_get_class' ), 10, 3 );
}

und im Constructor den Filter setzt:

add_filter( 'post_class', array( $this, 'wp_get_class' ), 10, 3 );

Im Theme wird die Klasse dann vor dem Loop einmal instanziert. Direkt danach räumt man mit unset() auf die Instanzvariable alles sauber auf.

Kommentare

Es wurden noch keine Kommentarte zu diesem Artikel geschrieben.

Fragen, Ideen oder Kritik? – Hier ist Platz dafür!

Dein Kommentar

Um ein Kommentar abzugeben, reicht der Text im Kommentarfeld. Die Angabe eines Namens wäre nett, ist aber nicht erforderlich.

Du darfst folgenden HTML-Code verwenden, musst aber nicht:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>