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
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



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
 

{{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
 

{{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
 

{{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}}
 
 





screenshot
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



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
 
{{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()




1
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
 

{{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>
 

 





screenshot
Abbildung 2: Anzeige der Online-Zeit über dem Profil



Du willst es noch genauer wissen?
Weiter geht's im zweiten Teil des Tutorials: Gruppenrechte
Hinweis


Login
Activity Feed
forum_topic forum_topic
Temu , a rapidly growing global shopping platform, is renowned for its extensive collection of trending items, unbeatable prices, and exceptional customer service. As of April 2025, Temu is offering an exclusive $100 Off coupon code (acs670886) to both new and existing users, enhancing your shopping...
forum_topic forum_topic
Exclusive Temu Coupon Code (acs670886) – Save Big on Your Shopping!Temu has become a go-to online marketplace for shoppers looking for high-quality products at unbeatable prices. With millions of trending items, fast delivery, and free shipping available in 67 countries, Temu ensures a seamless shop...
forum_topic forum_topic
Temu is changing the way we shop online with incredible deals, unbeatable prices, and exciting offers. If you're looking for a fantastic way to save, the Temu coupon code (acs670886) gives you a flat 90% discount, Temu shopping even more fun. Whether you're a new user or an existing shopper, this Te...
forum_topic forum_topic
Looking to snag amazing deals on trending products with unbeatable prices? Temu is here to Temu your shopping dreams come true. With the Temu coupon code (acs670886), you can enjoy up to £100 off, whether you’re a new or existing user. April 2025 brings even more fantastic savings, so don...
forum_topic forum_topic
IntroductionLooking for incredible savings on Temu ? Our Temu coupon code [acs670886] $200 off is here to give you unbeatable discounts on your next purchases.The [acs670886] coupon code ensures maximum benefits for shoppers across the USA, Canada, and European countries. Whether you're a new or exi...
forum_topic forum_topic
Looking to enjoy exclusive savings on your next Temu shopping spree? You're in luck! By using the special Temu coupon code (acs670886), you can unlock a flat $100 discount, score up to 40% off, and even access free gifts with your orders. Whether you're a first-time user or a loyal customer, Temu ’s...
forum_message forum_message
Rika1 und Oldi haben 2 neue Beiträge im Thema Laufschrift über Header geschrieben.
Olaf schickt Dir bestimmt das private Plugin, das er mir geschickt hat. Da hast Du es viel leichter.
rating rating
JiminyC hat sich bedankt!
Beitrag: Bewertungssystem mobiles Layout: Buttons nicht sichtbar
%usernames% hat sich bedankt!
forum_message forum_message
Oldi, Olaf und spotter46 haben 4 neue Beiträge im Thema Probleme mit V6 und x6 geschrieben.
Hallo ihr helfenden Hände,danke für die Hinweise und Unterstützungen. Auf wundersame Weise hat sich die Korrektur von Passwörtern und Profiländerungen erledigt. Ich komme an alle neuen Felder zur Korrektur heran. Leider habe ich die Ursache nicht ergründen können. Noch bleibt das Problem mit den "do...
rating rating
spotter46 hat sich bedankt!
Beitrag: Probleme mit V6 und x6
%usernames% hat sich bedankt!
rating rating
Olaf und Oldi haben sich bedankt!
Beitrag: Probleme mit V6 und x6
%usernames% haben sich bedankt!
forum_message forum_message
Olaf und 5 weitere haben 10 neue Beiträge im Thema Probleme mit V6 und x6 geschrieben.
Wenn ich mal was zu den Fehler im Plugin "Countdown" sagen darf;es müssen alle Felder im Plugin ausgefüllt werden.Wovon soll sonst das Programm die Zeit berechnen?Bei Dir fehlt die Eingabe der Jahreszahl.Im Bild Countdown 2 ist zu sehen,wie ich die Eingabe von diesen Ostern gemacht habe.GrußOlaf
forum_topic forum_topic
Oldi hat das Thema Probleme mit V6 und x6 erstellt
Bin begeistert mit dem Layout von x6. Wurde auch von den Usern als "nicht schlecht" angenommen. Habe allerdings einige Farben verändern müssen. Wurde so gewünscht. Dass die Smileys kleiner sind, ist zu akzeptieren, damit werden sie auch in der Gruppe übersichtlicher.Allerdings habe ich für mich leid...
forum_message forum_message
Mike48 und 2 weitere haben 11 neue Beiträge im Thema Header nicht sichtbar mobile Ansicht geschrieben.
Beim V1 bis V4 kommt man wie folgt in die mobilen EinstellungenAdministration → Layout → Mobil Da kannst du alle Einstellungen für die mobile Ansicht machen. Auch deine Farben in Mobil so wie im Desktop anpassen. Für den Header:Administration → Layout → Mobil →Desktop-Header Zum Beispiel so:[[File:D...
rating rating
Katzenpfote hat sich bedankt!
Beitrag: Foren-Logo
%usernames% hat sich bedankt!
forum_message forum_message
Mike48 und 1 weitere haben 6 neue Beiträge im Thema Foren-Logo geschrieben.
Ich habe es mal probiert.Administration → Kopf- & FußzeileIm Logo Wizard nur das Logo eingetragen. Ich habe das Logo geändert und den Hintergrund transparent gemacht. Kannst du dir hier runterladen.[[File:Katzen-Logo-3.png|none|600px|600px]]Administration → Layout → Farben & Einstellungen → Desktop-...
rating rating
Katzenpfote hat sich bedankt!
Beitrag: Foren-Logo
%usernames% hat sich bedankt!
forum_message forum_message
spotter46 und 1 weitere haben 2 neue Beiträge im Thema Foren-Logo geschrieben.
Zitat von Katzenpfote im Beitrag #11Hallo Zusammenwie kann ich das Forenlogo vergrößern?In dem Du das Bild vergrößerst und das alte Logo damit ersetzt
forum_message forum_message
Katzenpfote und 1 weitere haben 4 neue Beiträge im Thema Meine Forenadresse wird unter den Beiträgen falsch angezeigt? geschrieben.
Zitat von creator im Beitrag #4Wenn du bei der Signatur etwas nach unten scrollst, wirst du den Link sicher sehen können.Dankeschön für den Hinweis 👏 genauso ist es.
forum_topic forum_topic
Hallo Zusammen,kann mir Jemand sagen warum die Forenadresse falsch angezeigt wird obwohl der Eintrag im Profil richtig ist?Unter den Beiträgen hier wird angezeigt www.katzenforum.dein meinem Profil steht www.katzenforum-nr1.de [[File:IMG_4343.jpeg|none|fullsize]]
forum_message forum_message
Katzenpfote hat einen neuen Beitrag im Thema Zugriff auf eigenen Domain geschrieben.
Danke @Ingmar für den Hinweis, das hatte ich glatt überlesen. Es hat sich gerade Jemand bei mir gemeldet. Vielen Dank
rating rating
Olaf hat sich bedankt!
Beitrag: Laufschrift über Header
%usernames% hat sich bedankt!
forum_message forum_message
creator hat einen neuen Beitrag im Thema Eigene Seite auf dem Smartphone geschrieben.
Zitat von Andreas Lipske im Beitrag #4Wenn man "responsiv" einsetzt, dann haben u.a."div" u. "center" in dem Seitencode nichts mehr verloren...Wo genau hast du das gehört? Das eine hat mit dem anderen nichts zu tun.Center ist "deprecated" (zur Entfernung vormarkiert), funktioniert aber weiterhin. St...
forum_message forum_message
Rika1 hat einen neuen Beitrag im Thema Laufschrift über Header geschrieben.
Lieber Olaf herzlichen Dank! Das ist jetzt genau was ich wollte und funktioniert einwandfrei!
rating rating
Rika1 hat sich bedankt!
Beitrag: Laufschrift über Header
%usernames% hat sich bedankt!
forum_message forum_message
Olaf und 3 weitere haben 6 neue Beiträge im Thema Laufschrift über Header geschrieben.
@Rika1 Ich habe Dir mein Plugin nochmal zugesendet (Version 0.020).Da kannst Du jetzt einstellen,ob die Laufschrift unter der Navi angezeigt werden soll oder über den Header.Sehr wichtig ist,das bei der Einstellung im Plugin "Anzeigen über den Header" beim V6 das Menü von Xobor nicht fixiert sein da...
rsummary rsummary
spotter46 und 2 weitere haben 2 Beiträge bewertet (Details)
%usernames% haben sich bedankt!
Wer ist Online?
0 Mitglieder und 44 Gäste sind Online
Besucher Statistiken
44 Aktive User
0 Mitglieder und 44 Gäste sind Online

Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)

Besucherzähler
Heute waren 369 Gäste , gestern 6441 Gäste online

Statistiken
Themen 41902
Beiträge 306902
Mitglieder 12.581
Forum empfehlen