Fleißigste Allzeit-Kommentatoren würdigen

Übersichtsseite für Topkommentatoren


Der Artikel besteht aus 1120 Wörtern. Geschätzte Lesezeit: 04:28 Minuten

wordpress-Bildschirm

Seit vielen Monaten bin ich so etwas wie ein Stammleser von Sylvis Blog. Mich beeindruckt es immer wieder, wie Sie ihre vielen Ideen umsetzt.

Eine ihrer neuesten Ideen gefiel mir durchaus auch sehr gut. Seit neuestem lässt Sie auf einer eigenen Seite diejenigen darstellen, die nicht nur während der letzten 30 oder 365 Tage am häufigsten einen Kommentar bei ihr hinterlassen haben, sondern Sie lässt dort sozusagen die Allzeit-Topkommentatoren auflisten, inklusive Gravatar.

Allerdings bewerkstelligt Sie das mit einem zusätzlichen Plugin.

Weil mir (auch) diese Idee mal wieder gut gefiel, dachte ich mir, das das aber auch ohne Plugin gehen müsste. Denn schließlich habe ich zumindest jetzt schon die Top-Kommentatoren der letzten 30 bzw. 365 Tage mit Gravatar, dem Namen und der Kommentaranzahl in der Sidebar stehen. Meine Schlussfolgerung war daher, das man doch 'lediglich' den Code etwas ergänzen müsste.

Wer mich kennt weiß das 'lediglich' für mich schon durchaus Arbeit bedeutet. Ein wenig php kann ich zwar, aber das dann so hinzubasteln, das es das bewirkt was es soll, ist schon nicht so ganz leicht für mich. Aber so schnell lasse ich mich von einem Vorhaben nicht abbringen und machte mich an die Arbeit.

Den folgenden Code galt es entsprechend umzubauen, das als Ergebnis eine Anzeige wie bei Sylvis Seite zu sehen ist:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function top_commentators_jahr() {
	global $wpdb;
	$topcommentator_query="SELECT comment_author, comment_author_email, comment_type, SUBSTRING_INDEX(comment_author_url, '/', 3) as top_commentator, COUNT(*) as top_num FROM $wpdb->comments
		WHERE comment_approved='1' 
		AND comment_author_url IS NOT NULL
		AND comment_author_url != ''
		AND comment_author_email NOT LIKE 'webbi@themenfreund.de%'
		AND comment_author_email NOT LIKE 'kommentar@themenfreund.de%'
		AND comment_author_url NOT LIKE 'http://twitter.com/%'
		AND comment_author_url NOT LIKE 'https://themenfreund.de%'
		AND comment_type NOT LIKE 'pingback' OR 'trackback'
		AND comment_date >= CURDATE() - INTERVAL 365 DAY  
		GROUP BY top_commentator
		Order by top_num DESC, comment_date ASC
		LIMIT 3";
	$topcommentator_result = $wpdb->get_results($topcommentator_query);
	if ( !empty($topcommentator_result) ) {
		foreach ($topcommentator_result as $comment) :
			$co_aut = $comment->top_commentator;
			$co_aut = str_ireplace("http://", "", $co_aut);
			echo '<ol>';
			echo '<li style="list-style-type:none"><div class="top-komm">'. get_avatar( $comment, 32 ),' <a href="'.$comment->top_commentator.'/" title="&#039;.$comment-&gt;comment_author.&#039;" target="_blank">'.$comment->comment_author.'</a> ('.$comment->top_num.')</div></li>';
			echo '</ol>';
		endforeach;
		}
}

Nachdem ich einige Tage lang viele Seiten, die sich mit php beschäftigen, studiert hatte und einige Stunden mit probieren verbracht hatte, bekam ich schließlich das gewünschte Ergebnis hin. Und so sieht der umgebaute, bzw. erweitere Code nun aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function top_commentator_all() {
	global $wpdb; 
	$i = 0;
	echo '<div class="topcommenters">';
	echo '<table border="0" cellSpacing="3" cellPadding="5" width="85%">';
	$topcommentator_query="SELECT comment_author, comment_author_email, comment_type, SUBSTRING_INDEX(comment_author_url, '/', 3) as top_commentator, COUNT(*) as top_num FROM $wpdb->comments
		WHERE comment_approved='1' 
		AND comment_author_url IS NOT NULL
		AND comment_author_url != ''
		AND comment_author_email NOT LIKE 'webbi@themenfreund.de%'
		AND comment_author_email NOT LIKE 'kommentar@themenfreund.de%'
		AND comment_author_url NOT LIKE 'http://twitter.com/%'
		AND comment_author_url NOT LIKE 'https://themenfreund.de%'
		AND comment_author_url NOT LIKE 'http://facebook.com%'
		AND comment_type NOT LIKE 'pingback' OR 'trackback'
		GROUP BY top_commentator
		Order by top_num DESC, comment_date ASC
		LIMIT 30";
	$topcommentator_result = $wpdb->get_results($topcommentator_query); 
	if ( !empty($topcommentator_result) ) {
		foreach ($topcommentator_result as $comment) :
			$co_aut = $comment->top_commentator;
			$co_aut = str_ireplace("http://", "", $co_aut);
			echo  '<td>'.get_avatar( $comment, 64 ),' <a href="'.$comment->top_commentator.'/" title="&#039;.$comment-&gt;comment_author.&#039;" target="_blank"><br />'.$comment->comment_author.'</a> ('.$comment->top_num.')</td>';
			$i++;
			if($i%3==0) {
			echo '</tr><tr>';		
		}
		endforeach;
		$i=0;
		}
		echo '</table>';
		echo '</div>';
		}

Und das passiert in den einzelnen Zeilen:

Zeile 1: Umbenennen der Funktion, um Fehlermeludngen und Kollisonen mit dem bestehenden Code aus der Sidebar zu verhindern
Zeile 2: Die globale WordPress-Datenbank wird angesprochen.
Zeile 3: Der Zähler für die Anzahl der Bilder in einer Reihe wird auf 0 gesetzt
Zeile 4: eine div-class namens topcommenters wird geöffnet
Zeile 5: Erstellen einer Tabelle ohne Rahmen, mit einem Abstand der Zellen zueinander von 3, einem Abstand des Textes zum Rand von 5, sowie einer Breite von 85%
Zeile 6: Abfrage, die aus der Datenbank-Tabelle comments die folgenden Spalten abfragt: comments_author, comments_author_email, comment_type, comment_author_url - welche auch gleich als Basis für die Zählung genommen wird
Zeile 7: Nur zugelassene Kommentare werden gezählt
Zeilen 8 - 15: Weitere Bedingungen die erfüllt sein müssen, damit der Kommentar gezählt wird.
Zeile 16: Nach der URL gruppieren
Zeile 17: Absteigend nach der Anzahl der Kommentare sortieren, aber aufsteigend nach dem Kommentar-Datum. Letzteres Könnte hier auch entfallen. Wobei comment_date ASC aber dafür sorgt, das wenn zwei Kommentatoren die gleiche Anzahl an Kommentaren vorweisen können, derjenige zuerst aufgelistet wird, der zuletzt kommentiert hat
Zeile 18: Wie viele Kommentatoren sollen angezeigt werden
Zeile 19: Übergabe des Abfrageergebnisses aus Zeile 6 an die Variable topcommentator_result
Zeile 20: Wenn die Abfrage ein Ergebnis geliefert hat - also nicht leer ist die
Zeile 21: Schleife durchlaufen, bei der die Variable topcommentator_result durch die Variable comment ersetzt wird
Zeile 22 + 23: Weitere Variablen die durch andere Variable ersetzt werden sollen
Zeile 24: Ausgabe des Ergebnisses in einer Zeile
Zeile 25: Nach jedem Durchlauf der Schleife den Zähler $i um 1 erhöhen und
Zeile 26: wenn der Zähler = 3 ist
Zeile 27: die Zeile beenden und eine neue beginnen
Zeile 28: Ende der if-Schleife für den Zähler
Zeile 29: Ende der For-Schleife
Zeile 30: Den Zähler $i wieder auf 0 setzen
Zeile 31: Ende der Ausgabe-Schleife
Zeile 32: Ende der Tabelle
Zeile 33: Ende der Div-Klasse
Zeile 34: Ende der Funktion

Und damit habe ich es dann erreicht, das die Übersicht der Allzeit-Topkommentatoren so ausschaut wie bei Sylvi.

Allerdings, und das habe ich nicht hinbekommen, habe ich in einem php-Forum folgendes gelesen:

Mit Tabellen gar nicht. (Allenfalls in einem colspan, das ist aber auch eher ein Workaraound).

Wie wärs damit:
Statt Tabellen benutze ein div mit konstanter Breite um jedes Bild. Die divs werden dabei mit float:left style-formatiert. Jedes 3. div erhält zusätzlich ein clear:left Attribut.

Quelle: php.de

Wenn jemand weiß, wie man es so umsetzen kann, das eine Tabelle überflüssig wird und man jedem 3. div das erwähnte clear:left-Attribut zuweist, der möge das bitte in einem Kommentar kundtun. Danke dafür schon mal im voraus!

Per CSS habe ich dann noch die Div-Klasse formatiert. Und das schaut bei mir so aus:

1
2
3
4
5
6
7
8
9
.topcommenters table{
border-spacing:3px;
width:95%;
border: 0;
float: right;
margin: 0 100px;
padding: 16px 50px;
text-align: center;
}

Den Rest habe ich quasi wie Sylvi gemacht!

Ich habe im Backend eine neue Seite erstellt, der ich ein vorher erstelltes Template zugeordnet habe. Die Ausgabe darin erfolgt mit folgendem Code:

<?php echo top_commentator_all(); ?>

Was haltet ihr von meiner Umsetzung der Übersicht??

Marcus
Über Marcus 708 Artikel
Ich freue mich über Deinen Besuch auf meinem Blog! Wenn Dir der Artikel gefallen hat, teile ihn doch mit anderen und hinterlasse Deine Meinung. Mehr über mich gibt es hier zu lesen

1 Kommentar

  1. Hallo Marcus,

    Respekt, da hast Du Dir sehr viel Mühe gegeben. Es scheint ja wunderbar zu funktionieren und gut sieht es zudem auch noch aus.

    Apropos Tabelle: das Plugin Top Contributors beinhaltet auch eine Tabelle.
    Vielleicht schaust Du Dir mal die „Wall of Fame“ bei Timm (Netzblogger) an. Diese Anzeige scheint auch ohne Tabellen-Formatierung auszukommen.

    Lieben Gruß und noch einen schönen Sonntag,
    Sylvi
    Sylvi letzter Artikel auf dem eigenen Blog: SMu Manual Dofollow: wenn Backupfile fehlt und die Webseiten-Url nicht versteckt wird

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*


CommentLuv - verlinke einen deiner Blog-Artikel