Plugin Tutorial für Einsteiger - 1.3 Daten Speichern und Lesen
Hallo Welt - 1.3 Variablen
In diesem Tutorial beschreiben wir verschiedene Möglichkeiten Daten in einem Plugin zu speichern und wieder auszulesen. Zur Startseite des Tutorials
Allgemeiner Hinweis: Es empfiehlt sich, dieses Tutorial in einem Testforum auszuprobieren, um den laufenden Betrieb im Hauptforum nicht zu beinträchtigen. Erstellen Sie dazu einfach bei Bedarf ein neues Forum unter www.xobor.de
Hinweis
Plugin Hallo Welt - Daten Speichern und Lesen
Beschreibung
Bisher beschränkten wir uns beim "Hallo Welt" Plugin ausschließlich auf die Ausgabe einfacher Texte. Für die meisten Plugins benötigt man jedoch auch die Möglichkeit, Daten zu Speichern und später wieder anzuzeigen.
Das wird über die Daten-Variablen (data Vars) oder die globalen Variablen (global Vars) realisiert.
Für diese Beispiel legen wir eine je eine Variable beider Typen an und erläutern deren Funktion.
Allgemeines
Unterschied zwischen data Vars und global Vars
Beide Variablentypen können verwendet werden um beliebige Arten von Daten zu speichern und später wieder auszugeben. Allerdings ist eine Daten-Variable immer einem bestimmten Inhalt des Forums zugeordnet. So kann man z.B. Daten speichern, die immer einem bestimmten Beitrag oder Benutzerprofil zugeordnet werden. Die Werte dieser Variablen stehen immer dann zur Verfügung, wenn das betroffene Element (also z.B. der Beitrag, zu dem die Variable gehört) gerade angezeigt wird.
Globale Variablen dagegen gelten für das gesamte Plugin und stehen auf jeder Seite des Forums zur Verfügung. Sie können z.B. verwendet werden, um Benutzereinstellungen zu einem Plugin zu speichern.
Wir das Forumlar für die "Neue Globale Variable" oder das Formular für eine "Neue Data Variable" geöffnet, haben beide Type zunächst die gleichen Grundeinstellungen:
Name: Der Name der neuen Variable
Parsing: Welche Art von Code ist erlaubt? BBCode? HTML?
Type: Welche Werte können gespeichert werden?
Rechteeinstellungen: Diverse Rechteeinstellungen, wer die Variable wann genau beschreiben/erstellen oder ändern darf.
Für Variablen gilt natürlich der gleiche Grundsatz wie im Forum auch:
Man sollte NIE den Mitgliedern ermöglichen, HTML abzuspeichern welches dann später im Forum ausgegeben wird. HTML sollte daher nur in Ausnahmefällen und nur für auschließlich vom Admin nutzbare Variablen erlaubt werden.
Hinweis
Hinweis: Neben einigen Standardwerten (Alle, Administratoren/Moderatoren etc.) kann auch eine Konfigurationsvariable vom Typ "grouprights" für die Rechtevergabe verwendet werden.
Das wird im nächsten Abschnitt des Tutorials genauer beschrieben: Grouprights Variablen
Das wird im nächsten Abschnitt des Tutorials genauer beschrieben: Grouprights Variablen
Hinweis
Bei den Data-Variablen gibt es zusätzlich noch zwei weitere Felder:
origin type: Hier wird festgelegt, welchem Element im Forum die Datenvariable zugeordnet ist. Soll ein Plugin z.B. Daten zu einem Beitrag speichern, wird hier der Typ "forum_post" ausgewählt.
userseparated: Diese Funktion befindet sich noch in der Betaphase. Wenn userseparated aktiviert wird, wird für jedes Mitglied eine eigene Datenvariable angelegt. Um beim Beispiel des "forum_posts" zu bleiben: Man könnte somit z.B. ein Plugin realisieren, bei dem jedes Mitglied seine eigenen Kommentare zu Beiträgen hinzufügen kann, die dann später auch nur von diesem Mitglied gelesen werden können.
Hallo Welt Beispiel - Globale Variable
Für dieses Tutorial wollen wir eine Variable anlegen die ausgibt wann zuletzt ein Administrator online war.
Plugin-Entwicklung --> Hallo Welt --> Neue globale Variable:
Feldname | Wert |
---|---|
Name | adminonline |
Hidden-Var | Nein (die Variable soll immer zur Verfügung stehen) |
Parsing | Plain Text (BBCode und HTML wird hier nicht benötigt) |
Type | Chars (es soll ja nur ein Datum gespeichert werden) |
Lesen | Alle (jeder darf den Wert lesen) |
Schreiben | Administrator (nur Admins dürfen den Wert ändern) |
Globale Variable Beschreiben
Jedesmal, wenn ein Administrator die Seite lädt, wollen wir die die aktuelle Uhrzeit in der globalen Variablen speichern.
Dazu nutzen wir die Javascript-Methode setGlob
Plugin-Dokumentation: setGlob-Funktion
Plugin API
für die Speicherung ersetzen wir den Code des Plugin-Templates "Test oben" mit folgedem Code:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
{{user_admin==true.start}}
<script>
var newval = Date.now(); //erzeugt einen aktuellen Timestamp
xobor.plugin("hallowelt").setGlob("adminonline",newval,function(res){
/*Wert gespeichert, keine Ausgabe nötig*/
});
</script>
{{user_admin==true.end}}
Jetzt wird jedesmal, wenn ein Admin die Seite aufruft. der aktuelle Timestamp in der Variable adminonline gespeichert. Für nicht-Admins können wir das dann auslesen und anzeigen.
Das geschieht mit der getGlob Methode des Pluginsystems.
Globale Variable Lesen und Anzeigen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{{user_admin==false.start}}
<div id="admininfo"><!--hier wird später der Wert der Variablen ausgegeben--></div>
<script>
lastonline = xobor.plugin('hallowelt').getGlob('adminonline');
if(lastonline){
timeFormat.displayFormat = 'd.m.Y H:i'; // gewünschtes format des datums
lastonline = timeFormat.format(lastonline); //hier erzuegen wir ein schön formatioertes Datum aus unserem Timestamp - details siehe spoiler unten..
console.log("last:" + lastonline);
$('#admininfo').html("Admin zuletzt online: " + lastonline); //hier wird der Wert in die Div mit der ID admininfo geschrieben
}else{/*Kein Admin war online, nichts ausgeben*/ console.log("nores");}
{{user_admin==false.end}}
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
{{user_admin==true.start}}
<script>
var newval = Date.now(); //erzeugt einen aktuellen Timestamp
xobor.plugin("hallowelt").setGlob("adminonline",newval,function(res){
/*Wert gespeichert, keine Ausgabe nötig*/
});
</script>
{{user_admin==true.end}}
{{user_admin==false.start}}
<div id="admininfo"></div>
<script>
/**
* man muss ja nicht jedesmal das Rad neu erfinden: Diese Funktion wurde über Google gefunden und formatiert unser Datum im gewünschten Format:
* Return a timestamp with the format "d/m/yy h:MM:ss TT"
* @type {Date}
*/
var timeFormat = {
/**
* Output format.
*
* d - current day
* m - current month
* Y - current Year
*
* H - current hour (24 hour system)
* i - current minute
* s - current second
*/
displayFormat: 'd.m.Y - H:i:s',
/**
* Format given unix-timestamp
*/
format: function(timestamp) {
var d = new Date(timestamp);
var output = this.displayFormat;
output = output.replace(/d/g, this.padZero(d.getDate()))
.replace(/m/g, this.padZero(d.getMonth()+1))
.replace(/Y/g, d.getFullYear())
.replace(/H/g, this.padZero(d.getHours()))
.replace(/i/g, this.padZero(d.getMinutes()))
.replace(/s/g, this.padZero(d.getSeconds()));
return output;
},
/**
* add zero paddings to numbers smaller than 10
*/
padZero: function(number) {
if (number < 10) {
return "0" + number.toString();
}
return number;
}
};
lastonline = xobor.plugin('hallowelt').getGlob('adminonline');
if(lastonline){
timeFormat.displayFormat = 'd.m.Y H:i'; // gewünschtes format des datums
lastonline = timeFormat.format(lastonline); //hier erzuegen wir ein schön formatioertes Datum aus unserem Timestamp..
console.log("last:" + lastonline);
$('#admininfo').html("Admin zuletzt online: " + lastonline); //hier wird der Wert in die Div mit der ID admininfo geschrieben
}else{/*Kein Admin war online, nichts ausgeben*/ console.log("nores");}
</script>
{{user_admin==false.end}}
Abbildung 1: Anzeige der Online-Zeit unter dem Forum
Hallo Welt Beispiel - Daten Variable
Für dieses Beispiel möchten wir eine variable anlegen, in der gespeichert wird, wann ein Mitglied das letzte Mal sein eigenes Profil aufgerufen hat.
Dabei musss für jedes Mitgllied eine eigene Varaiballe gespeichert werden. Gelöst wird das über eine Datenvariable.
Plugin-Entwicklung --> Hallo Welt --> Neue Data Variable:
Feldname | Wert |
---|---|
Name | profileonline |
Parsing | Plain Text (BBCode und HTML wird hier nicht benötigt) |
origin_type | user_profile (hier legen wiir fest, dass die Variable einem Benutzerprofil zugeordnet wird.) |
Type | Chars (theoretisch reicht auch ein Int - es soll ja nur ein Timestamp gespeichert werden) |
Lesen (alle Leserechte) | Alle (jeder darf den Wert lesen) |
Schreiben | docreate_plugindefault,dochangeall_plugindefault : Administrator (nur der Admin darf immer alles ändern)docreatemyorigin_plugindefault,dochangemyorigin_plugindefault: Alle (Alle dürfen den Wert der Ihnen zugeordneten Variablen ändern) |
Daten Variable Beschreiben
Jedesmal, wenn ein Mitglied sein Profil besucht, soll der aktuelle Timestamp gespeichert werden.
Dazu nutzen wir die Javascript-Methode setDataVar
Plugin-Dokumentation: setDataVar-Funktion
Plugin API
Damit das klappt, müssen wir ein neue Plugin-Template anlegen, welches immer dann geladen wird, wenn ein Benutzerprofil aufgerufen wird.
Das bisher verwendete Element "Test Oben" wird nicht mehr benötigt und kann vorerst gelöscht werden.
Neues Element erstellen -> Plugin Element
Feldname | Wert |
---|---|
Template | Mitgliederprofil |
Footer | Inline | Header |
Template Name | frei wählbar, wir nennen das Element hier Profil Test |
In dem neu erstellten Element könnnen wir nun den Code für die Speicherung der Data-Variablen einfügen:
Im Profil gibt es die Variablen
{{userid}} --> Id des Mitglieds, dessen Profil aufgerufen wird
{{user_id}} --> Id des Mitglieds, welches das Profil aufruft
Ist der Wert beider Variablen identisch, wissen wir, dass ein Mitglied gerade sein eigenes Profil aufruft.
In diesem Fall wollen wir den aktuellen Timestamp in der des Nutzerprofils Data-Variablen abspeichern:
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
{{userid=={user_id}.start}}
<script>
var newval = Date.now(); //erzeugt einen aktuellen Timestamp
var origin_type = 3 //siehe https://www.xobor.de/plugin-doc-api.html#Tipps_und_Tricks_Sonstiges_Target_Types
var user_id = {{userid}}; //id des Mitglieds, dem die Variable zugeordnet wird
//setdataVar-Aufruf:
xobor.plugin("hallowelt").setDataVar("profileonline",origin_type,user_id,newval,function(res){
/*Wert gespeichert, keine Ausgabe notwendig*/
});
</script>
{{userid=={user_id}.end}}
Ruft nun ein Mitglied sein eigenes Profil auf, wird die aktuelle Zeit in der Data-Variablen gespeichert.
Globale Variable Lesen und Anzeigen
Ruft jemand das Profil eines Mitglieds auf möchten wir anzeigen, wann dieses Mitglied zuletzt sein Profil gesehen hat.
Die Abfrage der Variablen geschieht mit der Methode getDataVar()
Plugin-Dokumentation: getDataVar-Funktion
Plugin API
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div id="visitinfo"><!--hier wird später der Wert der Variablen ausgegeben--></div>
<script>
//setdataVar-Aufruf:
xobor.plugin("hallowelt").getDataVar("profileonline",3,{{userid}},function(res){
timeFormat.displayFormat = 'd.m.Y H:i'; // gewünschtes format des datums
lastonline = timeFormat.format(res); //hier erzuegen wir ein schön formatiertes Datum aus unserem Timestamp - details siehe spoiler unten..
$('#visitinfo').html('Letzter Profilaufruf dieses Mitglieds: '+lastonline);
});
</script>
<script>
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{{userid=={user_id}.start}}
<script>
var newval = Date.now(); //erzeugt einen aktuellen Timestamp
var origin_type = 3 //siehe https://www.xobor.de/plugin-doc-api.html#Tipps_und_Tricks_Sonstiges_Target_Types
var user_id = {{userid}}; //id des Mitglieds, dem die Variable zugeordnet wird
//setdataVar-Aufruf:
xobor.plugin("hallowelt").setDataVar("profileonline",origin_type,user_id,newval,function(res){
/*Wert gespeichert, keine Ausgabe notwendig*/
});
</script>
{{userid=={user_id}.end}}
<div id="visitinfo"><!--hier wird später der Wert der Variablen ausgegeben--></div>
<script>
/**
* man muss ja nicht jedesmal das Rad neu erfinden: Diese Funktion wurde über Google gefunden und formatiert unser Datum im gewünschten Format:
* Return a timestamp with the format "d/m/yy h:MM:ss TT"
* @type {Date}
*/
var timeFormat = {
/**
* Output format.
*
* d - current day
* m - current month
* Y - current Year
*
* H - current hour (24 hour system)
* i - current minute
* s - current second
*/
displayFormat: 'd.m.Y - H:i:s',
/**
* Format given unix-timestamp
*/
format: function(timestamp) {
var d = new Date(timestamp);
var output = this.displayFormat;
output = output.replace(/d/g, this.padZero(d.getDate()))
.replace(/m/g, this.padZero(d.getMonth()+1))
.replace(/Y/g, d.getFullYear())
.replace(/H/g, this.padZero(d.getHours()))
.replace(/i/g, this.padZero(d.getMinutes()))
.replace(/s/g, this.padZero(d.getSeconds()));
return output;
},
/**
* add zero paddings to numbers smaller than 10
*/
padZero: function(number) {
if (number < 10) {
return "0" + number.toString();
}
return number;
}
};
//getdataVar-Aufruf:
xobor.plugin("hallowelt").getDataVar("profileonline",3,{{userid}},function(res){
if(res){
timeFormat.displayFormat = 'd.m.Y H:i'; // gewünschtes format des datums
lastonline = timeFormat.format(res); //hier erzuegen wir ein schön formatiertes Datum aus unserem Timestamp - details siehe spoiler unten..
$('#visitinfo').html('Letzter Profilaufruf dieses Mitglieds: '+lastonline);
}else{$('#visitinfo').html('Dieses Mitglied hat sein Profil noch nicht aufgerufen');}
});
</script>
Abbildung 2: Anzeige der Online-Zeit über dem Profil
Du willst es noch genauer wissen?
Weiter geht's im zweiten Teil des Tutorials: Gruppenrechte
Weiter geht's im zweiten Teil des Tutorials: Gruppenrechte
Hinweis
Login
Activity Feed
Liebe Gäste und Mitglieder,Um das Wissens- und Testforum 'Friends of Xobor', auch 'FOX' genannt - https://www.friends-of-xobor.de/ weiterhin mit dem benötigten Tarif in Betrieb zu halten, möchte ich hier gerne einen Spendenaufruf posten.Quelle dieses Aufrufs könnt ihr hier nachlesen:Neues Plugin - T...
Gestern 23:26
Hanshard hat das Thema Fehlerhafte Beitragsnummerierung und Zahl der Antworten erstellt
Hallo! Ich habe zwar bereits die Suchfunktion bemüht, wurde jedoch leider nicht fündig. Sollte ich etwas übersehen haben - sorry! Jedenfalls bilde ich mir ein, dass es diesen Fehler bereits einmal gab. Es kann sein, dass er mit dem heutigen Fehler (MySQL) zu tun hat, es ist aber auch möglich, dass e...
Hallo zusammen,bei uns kommt seit heute folgender Fehler, wenn man einen Beitrag schreibt oder ins Adminmenü möchte.Failed to connect to MySQL - Too many connectionsfailed connect mailDer Beitrag ist dann dennoch da, jedoch wird auch nichts mehr im Activity Feed angezeigt, lediglich die Bewertungen ...
Zitat von Karima im Beitrag Einstellung "Beiträge zählen" wird zurückgesetztIch klicke auf ein Forum und bin dann in den Foren Einstellungen. Dann stelle ich den Toggle "Beiträge zählen" aus und speichere.Wenn ich dann wieder auf das Forum klicke, ist der der Toggle "Beiträge zählen" wieder an.Ich h...
Hallo zusammen,nachdem ich die Suche hier mehrfach genutzt habe und keine Lösung gefunden habe, erstelle ich ein neues Thema. Ich habe aktuell das Problem, dass ich den Beitragszähler nicht ausstellen kann. Ich möchte, dass nur in einer bestimmten Kategorie Beiträge gezählt werden.Wenn ich jetzt in ...
%usernames% hat sich bedankt!
%usernames% haben sich bedankt!
%usernames% hat sich bedankt!
%usernames% hat sich bedankt!
%usernames% haben sich bedankt!
%usernames% hat sich bedankt!
Wer ist Online?
4 Mitglieder und 171 Gäste sind OnlineBesucher Statistiken
Heute waren Online
balea, Bea-8, cleo, Franz-Jupp, Gabriella, Gemshorn, Hanshard, Ingmar, Johannes, Lady of the light, m3ontour, Mike48, ms_fanie, nobody, old-smokey, Rika1, River, Scannerxy, Sternenfrau, Wolfgang, zickzack
balea, Bea-8, cleo, Franz-Jupp, Gabriella, Gemshorn, Hanshard, Ingmar, Johannes, Lady of the light, m3ontour, Mike48, ms_fanie, nobody, old-smokey, Rika1, River, Scannerxy, Sternenfrau, Wolfgang, zickzack
Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)
Besucherzähler
Heute waren 1166 Gäste und 21 Mitglieder, gestern 848 Gäste und 30 Mitglieder online.
Statistiken
Themen | 41715 |
Beiträge | 305278 |
Mitglieder | 12.463 |
Forum empfehlen