Zuletzt abgestimmte Umfrage anzeigen lassen


Der Artikel besteht aus 1128 Wörtern. Geschätzte Lesezeit: 04:30 Minuten

wordpress-Bildschirm

Ich bin ja gerade mehr oder minder dabei, ein bisschen mit Plugins und PHP zu basteln, um vielleicht noch die eine oder andere Funktion zu ermöglichen. Als Beispiel seien da nur die  Anzeige von Artikel-Bewertungen in der google Suchmaschine oder die Ausgabe zuletzt bewerteter Artikel in der Sidebar genannt.

Nun habe ich mich mit meinen nicht gerade Profihaften PHP-Kenntnissen daran gemacht, und für WP-Polls eine Funktion gebastelt, die das Plugin von Haus aus nicht mitzubringen scheint, und die ich auf einem anderen Blog von mir doch durchaus vermisst habe.

Und zwar habe ich auf dem anderen Blog zu fast jedem Artikel eine Umfrage laufen und ich wollte die Umfragen bei denen zuletzt abgestimmt wurde in der Sidebar des Blogs ausgeben.

Für PHP-Profis sicher nicht das Ding. Für jene die sich nur sehr eingeschränkt mit PHP auskennen ist das schon eine etwas größere Hausnummer. Schließlich werden nicht alle Daten des Plugins in einer Datenbank-Tabelle gespeichert, sondern in drei Tabellen.

Als da im einzelnen wären:

pollsa

Speicherung der Umfrageantworten
Hier speichert WP-Polls die Daten zu den Antworten der Umfragen

Hier speichert WP Polls die Antworten zu den jeweiligen Fragen mit ihrer jeweiligen ID, die ID zu der Umfrage, zu der die Antworten gehören und die Anzahl der Stimmen zu den jeweiligen Antworten

pollsip:

In der Datenbank-Tabelle pollip speichert WP-Polls die Daten zum Abstimmenden
In dieser Datenbank-Tabelle speichert WP-Polls die Daten zu den Abstimmungen

Hier speichert das Plugin die ID der Abstimmungsnummer - also wie oft insgesamt bei allen Umfragen abgestimmt wurde,  die ID der Umfrage, die ID der Umfrage-Antwort, für die abgestimmt wurde, die Uhrzeit zu der Abgestimmt wurde als Timestamp, ob ein Registrierter User oder ein Gast abgestimmt hat sowie die ID für diese Sorte Besucher. Bei registrierten User speichert das Plugin die Benutzer-ID

Aber es speichert auch, über welchen Host der Besucher kam und - damit ist das Plugin normalerweise nicht Datenschutzkonform und müsste eigentlich abgeschaltet werden: Die IP des Besuchers als vierstelligen Code.

pollq:

In der Tabelle pollq werden die Daten zu den gewählten Antworten gespeichert
Die Tabelle pollq speichert Daten rund um die jeweilige Frage

In dieser Datenbank-Tabelle speichert das Plugin die jeweiligen Fragen der Abstimmungen, wann die Frage gestellt wurde - das leider als Timestamp und nicht in lesbarer Zeit- und Datumsangabe, wieviel Stimmen es (bereits) gibt, ob die Umfrage aktiv ist, ob es mehrfache Antwortmöglichkeiten gibt und nicht zuletzt auch, wieviele Leute abgestimmt haben.

Letzteres kann aufgrund der möglichen Mehrfach-Antworten ja von der Zahl der gesammten Stimmen abweichen!

Trotzdem möchte ich Euch jetzt noch erklären, wie ihr die Umfrage(n) bei der / denen zuletzt abgestimmt wurde in der Sidebar angezeigt bekommt.

Dafür ist folgender Code verantwortlich:

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 umfrage() {
	global $wpdb;	
	$upd_query = "SELECT FROM_UNIXTIME(pollip_timestamp,'%d.%m.%Y um %H:%i:%s') AS polliptime_ger, pollip_aid, polla_aid, polla_answers, polla_votes, pollq_active, pollq_question,pollip_qid, pollip_timestamp FROM $wpdb->pollsip 
		INNER JOIN $wpdb->pollsq AS pq ON $wpdb->pollsip.pollip_qid = pq.pollq_id
		INNER JOIN $wpdb->pollsa AS pa ON $wpdb->pollsip.pollip_aid = pa.polla_aid
		WHERE pollq_active = '1'
		ORDER BY pollip_timestamp DESC
		LIMIT 3";	
	$upd_result = $wpdb->get_results($upd_query);
	if ( empty($upd_result) ) {
	echo '<h4 class="sidebar-title">Zur Zeit keine Umfrage aktiv</h4>';
	}
	foreach ($upd_result as $updat) {
		$cntVotedUser  = $updat->polla_votes - 1;
		$personsString = ($cntVotedUser == 1) ? ' weiterer Besucher stimmte' : ' weitere Besucher stimmten';
	echo '<div class="umfrage">';
	echo '<h5>'.$updat->pollq_question.'</h5><small>abgestimmt am: '.$updat->polliptime_ger.'<br />Letzte gewählte Antwort:<br />'.$updat->polla_answers.'</small>';
	if ($updat->polla_votes == 1) {
	echo ('<small><br />Erste Stimme für diese Antwort</small>');
	}
	elseif ($updat->polla_votes > 1) {
	echo '<small><br />'. $cntVotedUser . $personsString .' auch so ab</small>';
	}
	echo '</div><br />';
	}
}

Die Erklärung für den Code:
Zeile 1: Benennung der Funktion
Zeile 2: Ansprache der globalen WordPress-Datenbank
Zeile 3: Abfrage der benötigten Datenbankspalten. Hier könnt ihr, auch wenn am Ende der Zeile eigentlich nur eine Datenbank-Tabelle angesprochen wird, auch die benötigten / gewollten Spalten der anderen DB-Tabellen angeben. Denn mit dem folgenden Code werden die - in diesem Falle 3 - Tabellen verbunden
Zeile 4: Verbinden der Tabelle pollsq mit der Tabelle pollsip. Wobei dem Server gesagt wird, das die Spalte pollip_qid in der Tabelle pollsip der Spalte pollq_id in der Tabelle pollsq entspricht.
Zeile 5: Hier gilt das zur Zeile 4 geschriebene bezogen auf die Tabellen pollsip und polla. Wichtig ist auf jeden Fall, das ein identischer Wert in beiden Tabellen vorkommt um die Verknüpfung herstellen zu können!
Zeile 6: Damit auch nur Umfragen angezeigt werden, an denen man immer noch teilnehmen kann, wird hier festgelegt, das die Umfrage aktiv sein muss.
Zeile 7: Angezeigt werden sollen die Daten absteigend nach dem Zeitpunkt der letzten Abstimmung. In der Tabelle pollq gibt es auch einen Timestamp. Dieser bezieht sich aber auf den Zeitpunkt an dem die Frage gestellt wurde.
Zeile 8: Es sollen - in diesem Beispiel maximal 3 Umfragen angezeigt werden, bei denen zuletzt abgestimmt wurde
Zeile 9: Übergabe der gesammelten Werte in die Variablen upd_result
Zeile 10: Ist Abfrage leer ...
Zeile 11: ...diesen Text ausgegeben...
Zeile 12: und die Wenn-Abfrage schließen
Zeile 13: Ansonsten den Inhalt der Variablne updat_resault an die Variable updat übergeben
Zeile 14 + 15: die Werte links vom Gleichheitszeichen an die Variable mit dem Wert rechts vom =-Zeichen übergeben
Zeile 16: öffnen der geordneten Liste
Zeile 17: Ausgabetext mit den gewünschten Variablen
Zeile 18: Wenn für diese Antwort zum ersten Mal gestimmt wurde...
Zeile 19: ...gewünschten Text ausgeben...
Zeile 20: ...und diesen Teil der Wenn-Abfrage beenden
Zeile 21: Wurde schon einmal für diese Antwort gestimmt...
Zeile 22: ...diesen Text ausgeben...
Zeile 23: ...und diesen Teil der Wenn-Abfrage beenden.
Zeile 24: Ausgabe abschließen
Zeile 25: gesamten Wenn-Abfrage-Block schließen
Zeile 26: Funktion schließen

Das wäre der Code für die Abfrage der gewünschten Daten. Damit diese nun auch in der Sidebar angezeigt werden, benötigt es natürlich auch hierfür einen entsprechenden Code in der Sidebar.php.

Dieser sieht wie folgt aus:

<!--?php if (function_exists('umfrage'));?-->
<h3 class="sidebar-title">Zuletzt abgestimmte Umfragen:</h3>
<?php echo umfrage(); ?>

und führt zur folgenden Darstellung im Frontend des Blogs:

Die Ausgabe in der Sidebar aus
So schaut die Ausgabe der Funktion in der Sidebar aus

Der Code dürfte weitgehend selbsterklärend sein:
In Zeile 1 wird geprüft, ob die Funktion überhaupt existiert, Zeile 2 stellt bei mir die Überschrift des Blocks dar, unterhalb der die Daten ausgegeben werden und Zeile 3 sorgt schlußendlich für die Ausgabe der Daten.

Einziges Problem, welches ich bis jetzt leider nicht lösen konnte, ist, das der Timestamp nach der Umwandlung eine Uhrzeit +2 Stunden ausgibt! So ist die Abstimmung, wie auf der Abbildung zu sehen, nicht um 14:37 h erfolgt, sondern um 12:37 h.
Falls jemand dafür eine Lösung weiß, so bitte Bescheid geben!

Ich hoffe, das diese Bastelei für den einen oder anderen einen Nutzen hat.

Viel Spaß beim Einbauen und ausprobieren!

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

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*


CommentLuv - verlinke einen deiner Blog-Artikel