Anzeige der neuesten Kommentare:

Vor einigen Tagen hatte ich zu diesem Zweck das PlugIn Get Recent Comments ausprobiert - und war insgesamt unzufrieden: Zwar werden flexible Einstellungsmöglichkeiten geboten - aber wenn die Anzeige der letzten fünf Kommentare gleich satte 39 zusätzliche Abfragen erzeugt und das ganze System auch dementsprechend verlangsamt wird, sollte man sich nach einer anderen Möglichkeit umtun.

Im Zuge der Versuche, dem PlugIn WP-RSSImport 3.0 auch die korrekte Anzeige etwas ungewöhnlicherer Sonderzeichen “beizubringen”, kam mir die Idee, dass man statt der Nutzung eines leistungshungrigen PlugIns doch genausogut die eigenen Kommentar-Feeds auf der eigenen Seite einbinden könnte.

So hätte man eine wirklich schnelle Möglichkeit, die neuesten soundsoviel Postings bzw. Kommentare an passender Stelle auflisten zu können.

Gestern abend hab ich dazu einen Artikel bei bueltge.de gefunden … Demnach taugt diese Methode auch bei vielbesuchten Seiten - und demnach bin ich nicht der Erste mit dieser Idee …

:-)

Wie dem auch sei: RSS-Import läuft ziemlich fix - und ist für diesen Job beinahe ideal. Aber zwei Stolpersteine waren einfach nicht beiseite zu räumen:

  1. Auch in der neuen Version von WP-RSSImportTwo gibt es noch einige Anzeige-Probleme - Nämlich dann, wenn in einem “post-title” Anführungszeichen auftauchen. Ich hab wirklich lange dran herumprobiert, aber die fälschlicherweise angezeigten Fragezeichen waren zu hartnäckig.
  2. Die Ausgabe von Kommentaren erfolgt mit etlichen Formulierungen, die ich wenig attraktiv finde. In einem deutschsprachigen Auftritt muss nicht unbedingt “Comment on Keksrezepte by: Hänschen Müller” oder ähnliches stehen

Also hab ich nach einem anderen PlugIn gesucht - und ein geeignetes gefunden, nämlich “Recent Comments” von Nick Momrik.

Die ersten Tests waren überzeugend: Das PlugIn arbeitet schnell und verursacht nicht übermäßig viele Abfragen. Sieben zusätzliche bei Anzeige der 10 neuesten Kommentare empfinde ich im Vergleich zu der Belastung durch das vorher genannte PlugIn als unproblematisch. Ein paar Dinge sollten jedoch vor Einsatz angepasst werden - Denn es gibt mal wieder Umlaut-Probleme.

Die Ausgangssituation:

Nach Installation des PlugIns kann man die Anzeige der letzten x Kommentare an beliebiger Stelle im Template mit einer Anweisung nach folgendem Muster auslösen:

<?php mdv_recent_comments(5, 10, '<li>', '</li>', false, 2) ?>

Dabei steht die Zahl “5″ für die Anzahl der Kommentare, die “10″ für die Anzahl der Wörter, auf die der Kommentar gekürzt werden soll, “<li>” und “</li>” für das, was vor bzw. nach einem Kommentar ausgegeben werden soll. An der nächsten Stelle kann dann entschieden werden, ob auch Kommentare zu passwortgeschützten Beiträgen angezeigt (“true”) oder nicht angezeigt (“false”) werden dürfen - und die letzte Zahl “2″ schließlich … Ja, die gibt’s in der ursprünglichen Version eigentlich gar nicht:

Im “Lieferumfang” von “Recent Comments” befinden sich zwei unterschiedliche Anzeige-Varianten zwischen denen man durch Eingabe von “0″ oder “1″ beim Aufruf der Funktion wählen kann. Und um bei etwaigen Fehlversuchen nicht immer zwei Dateien miteinander vergleichen zu müssen, hab ich einfach kurzerhand eine dritte Anzeige-Variante “eröffnet”.

Das ist ganz einfach - und zudem eine prima Möglichkeit, mit ein und demselben PlugIn an verschiedenen Stellen ganz nach Wunsch angepasste Darstellungen zu erreichen. In der Original-Datei ist deutlich zu erkennen, wie man dabei vorgehen muss - die Zeilen 29 bis 42 sind hierbei die wichtigen:


if ($comment_style == 1) {
	$post_title = stripslashes($comment->post_title); 

	$url = $comment->comment_author_url; 

	if (empty($url))
		$output .= $before . $comment_author . ' on ' . $post_title . '.' . $after;
	else
		$output .= $before . "<a href='$url' rel='external'>$comment_author</a>" . ' on ' . $post_title . '.' . $after;
}
else {
	$output .= $before . '<strong>' . $comment_author . ':</strong> <a href="' . $permalink;
	$output .= '" title="View the entire comment by ' . $comment_author.'">' . $comment_excerpt.'</a>' . $after;
}

Wenn man also die erste if-Bedingung komplett kopiert und eine “2″ reinschreibt, kann man zwischen diesen Klammern seinen eigenen “comment_style” unbesorgt bearbeiten, ohne grundsätzliche Funktionen zu beeinflussen (… und außerdem kann man sich auf seiner Testseite gleichzeitig die “Original”-Ausgabe zum Vergleich anzeigen lassen … ) Der PHP-Code sollte jetzt jedenfalls in etwa so aussehen (gekürzt):


if ($comment_style == 1) {
	/* Variante beim Wert "1" */
}
if ($comment_style == 2) {
	/* Platz für die eigene Ausgabe-Variante*/
}
else {
	/* Variante beim Wert "0" */
}

Die Bearbeitung:

  1. Zunächst einmal ist ein wenig Übersetzung dran (z.B. die englischen Angaben im Link-Titel) - Wie man das macht, ist natürlich reine Geschmackssache.
  2. Desweiteren hat man es beim Gestalten ein wenig leichter, wenn der ausgegebene Quelltext einigermaßen sinnvoll umgebrochen und eingerückt ist. Also an einigen Stellen "\n" bzw. "\" nachtragen. Ist aber nicht unbedingt nötig.
  3. Dann überlegen, was ausgegeben werden soll. Ich zum Beispiel wollte einen Link zum Kommentar haben, Name des Autoren, sowie ein Auszug aus dem Kommentar sollten angezeigt werden - und im Linktitel sollte der Titel des kommentierten Beitrags genannt werden
  4. Jetzt ist zu überlegen, wo überall Umlaute auftauchen könnten.
    Folgende Variablen können Sonderzeichen enthalten:
    - $comment_author
    - $post_title
    - $comment_excerpt

All die genannten Variablen kann man mit derselben PHP-Funktion korrekt umwandeln. Dabei einfach nach folgendem Muster vorgehen:

$VariablenName

austauschen durch:

htmlentities( $VariablenName, ENT_QUOTES , 'utf-8' )

… das war’s schon. Und bis jetzt hab ich keine nicht-gewandelten Sonderzeichen im Quelltext gefunden. Freundlicherweise muss man in diesem Fall bei der Umwandlung in Entities trotz der Kürzungs-Funktion nichts weiter beachten. Denn da das PlugIn nicht nach Buchstaben, sondern nach ganzen Wörtern kürzt, sind “zwischendrin abgebrochene” Sonderzeichen ausgeschlossen.

Das Ergebnis:

Der Vollständigkeit halber hier als unverbindlicher Vorschlag der Code von “meinem” aktuell laufenden “comment_style”:


if ($comment_style == 2) {
	$output .= "\t" . $before . "<a href=\"" . $permalink . "\" title=\"Kommentar von " . htmlentities( $comment_author , ENT_QUOTES , 'utf-8' ) . " zu &quot;" . htmlentities( $comment->post_title , ENT_QUOTES , 'utf-8' ) . " (...)&quot; lesen\">";
	$output .= "<span>" . $comment_author . ":</span> " . preg_replace("/\r|\n/s", "", htmlentities( $comment_excerpt , ENT_QUOTES , 'utf-8' )) . " [...]</a>" . $after . "\n";
}

Anmerkungen:

  1. Die preg_replace-Anweisung hat nur kosmetische Funktion, damit wird der Quelltext von Zeilenumbrüchen befreit. Das kann problemlos weg gelassen werden.
  2. Ich fand es besser, nicht nur den Autorennamen, sondern gleich den gesamtenKommentar-”Ausschnitt” zu verlinken - wie immer: reine Geschmackssache. Jedenfalls muss man auf die Weise beim “Kommentar-Anlicken” nicht mehr so genau zielen.
  3. Zwei (allerdings eher unwichtige) Übersetzungen möchte ich nicht unerwähnt lassen:
    In Zeile 22 kann man eintragen, was im Falle eines nicht angegebenen Autorennamens angezeigt werden soll. Voreingstellt ist “annonymous”
    Und ganz am Ende der PlugIn-Datei kann die Ausgabe bei nicht vorhandenen Kommentaren bestimmt werden. Aber Wordpress-User ohne überhaupt irgendeinen Kommentar werden dieses PlugIn vermutlich ohnehin nicht einsetzen …

Coming soon:

Von Nick Momrick gibt’s weitere interessante PlugIns. Eins davon heißt “Recent Posts” und zeigt die neuesten Beiträge an. Beziehungsweise zeigt es den Anreißertext (“Auszug”) der neuesten Beiträge an. Anders als Wordpress aber nur, wenn tatsächlich einer hinterlegt worden ist … Doch dazu später mehr.