[gelöst] Zustand von Userpoints speichern

am 04.02.2012 - 17:03 Uhr in
Guten Abend,
ich stehe vor einem kleinen Problem..oder nur einer Denkblockade.
Zu meiner Konfiguration: Aktuellste stable versionen vom 7er core und views.
Vielleicht kann mir ja ein schlaues Köpfchen einen Anstoß geben.
Zum Aufbau:
User erhalten über eine woche hinweg userpoints. Einmal in der Woche werden diese zurückgesetzt. Ich möchte den Benutzer mit den meisten Punkten darstellen; allerdings auch nachdem die Punkte zurückgesetzt wurden. Also muss dieser Zustand gespeichert werden.
Hierzu dachte ich mir bereits, dass eine neue Tabelle erstellt werden kann, in welcher dann die User der letzten wochen mit den jeweils meisten Punkten aufgelistet sind. Hier könnte dann mit views auf die tabelle zugegriffen werden. (Falls das nicht totaler unsinn ist, wäre es nett, mir ein Modul zu empfehlen, mit welchem man in Views mit SQL filtern kann)
...Oder kann man den Zustand eines views zu einem bestimmten Zeitpunkt speichern?
Wie könnte man dieses Problem am einfachsten lösen?
Ich bedanke mich schonmal.
Mit freundlichen Grüßen
Hoamer
- Anmelden oder Registrieren um Kommentare zu schreiben
Definiere Dir einen eigenen
am 04.02.2012 - 18:17 Uhr
Definiere Dir einen eigenen Datentyp Userpointhistory, Titel: KW-Jahr, zwei Felder User-ID und Punkte. Im Rahmen des Resets der Userpunkte mußt Du erst den User mit den meisten Punkten ermitteln und dann einen passenden Datensatz von diesem Typ anlegen. Damit hast Du die Historie gesichert und kannst diese Datensätze problemlos via Views anzeigen lassen.
Beste Grüße
Werner
Vielen Dank
am 04.02.2012 - 22:54 Uhr
@Werner:
Vielen Dank, das hat mir einige Umwege erspart!
@alle: Habe es wie wla beschrieben hat folgendermaßen gelöst:
Neuen Inhaltstypen. In diesem UID und Punkte. (Wie in Tabelle). Einmal in der Woche wird dann das script ausgeführt, welches einen neuen Node des Datentyps erstellt und mit den Daten füllt.:
<?php
$link = mysql_connect('localhost', '<username>', '<passwort>');
if (!$link) {
die('keine Verbindung möglich: ' . mysql_error());
}
mysql_select_db("<datenbank>");
$result = db_query("SELECT uid, points FROM {userpoints} ORDER BY points ASC");
foreach ($result as $record) {
}
$node = new stdClass();
$node->type = 'userpointhistory';
node_object_prepare($node);
$node->title = 'Node Created Programmatically on ' . date('c');
$node->language = LANGUAGE_NONE;
$node->field_id[$node->language][0]['value'] = $record->uid;
$node->field_id[$node->language][0]['summary'] = text_summary($record->uid);
$node->field_id[$node->language][0]['format'] = 'filtered_html';
$node->field_punkte[$node->language][0]['value'] = $record->points;
$node->field_punkte[$node->language][0]['summary'] = text_summary($record->points);
$node->field_punkte[$node->language][0]['format'] = 'filtered_html';
$path = 'content/programmatically_created_node_' . date('YmdHis');
$node->path = array('alias' => $path);
node_save($node);
?>
Referenz:
Zum Database abstraction layer - hat mir geholfen
Erstellen der Nodes
PS:
$result = db_query("SELECT uid, points FROM {userpoints} ORDER BY points ASC");
Falls es jemand liest: Ich werte hier den Benutzer mit den meisten Punkten aus. Allerdings wird der Benutzer mit den meisten (!) punkten nur angezeigt, wenn ich aufsteigend (ascending) sortiere (ORDER BY points ASC) - wieso?