Dokumentation der Xobor Plugin API

Forum erstellen
Dieses Dokument ist auch als PDF-Verknüpfung pdf
Allgemein

Willkommen bei der Dokumentation des Xobor Plugin Systems
Auf diesen Seiten finden Sie viele Tipps und Tricks zur Entwicklung eigener Plugins sowie eine vollständige Dokumentation der Javascript Plugin API

1. Informationen

Das Xobor Plugin System ermöglicht es Entwicklern, aufwändige Änderungen an der Forensoftware vorzunehmen, ohne dabei direkt in die Forentemplates einzugreifen
Durch die Trennung von den Foren-Templates ist es auch möglich, Plugins zu entwickeln und diese mit anderen Foren zu teilen.
Um ein Plugin zu erstellen, öffnen Sie bitte den Bereich Plugins→Plugin-Entwicklung in ihrer Administration.
Dort finden Sie den Link für die Erstellung eines neuen Plugins

Plugin Elemente
Plugin-Elemente enthalten den Programmcode des Plugins. Alle Elemente können HTML, Javascript, CSS oder Template-Code verwenden. Der Type des Elements bestimmt am Ende an welcher Stelle der Plugin-Code ausgeführt wird.
1. Eigene Seiten
Eine eigene Seite wird über eine eigene URL aufgerufen. Eigene Seiten sind eigene HTML oder Javascript Dateien, die vom Plugin benötigt werden. Es kann auch Template-Code verwendet werden
2. Template Element
Genau wie in der Template-Entwicklung können hier Template-Elemente angelegt werden. Diese Elemente können dann nach, vor oder sogar innerhalb bestehender Foren-Template-Elemente geladen werden.
3. Action Type
Aktion Elemente ermöglichen es, Plugin Code mit erhöhten Rechten nach einer bestimmten Foren-Aktion im Forum auszuführen.
1. Eigene Seiten

Soll ein Plugin später nicht auf eine bestehenden Seite des Forums, sondern auf einer eigenen Seite angezeigt werden, muss zunächst eine eigene HTML-Seite angelegt werden. Oftmals werden eigene Javascript-Bibliotheken für ein Plugin benötigt - auch das kann mit einer eigenen Seite realisiert werden.
Bei der Erstellung eigener Seiten gibt es folgende Einstellungen zu beachten:

1. Name
Hier wird der Name der Seite angegeben. Die Seite ist dann später unter der Adresse "/seitenname.html" erreichbar. Beachten Sie jedoch, dass es zu Problemen kommen kann, wenn mehrere Plugins die gleiche Seite verwenden. Wählen Sie daher einen eindeutigen Namen für ihre Elemente
2. Static
Statische Seiten liefern bei jedem Seitenaufruf das gleiche Ergebnis und können für bessere Performanz gecached werden. Dies gilt z.B. für externe Javascript Bibliotheken.
3. Show Navi
Legt fest, ob auf der eigenen Seite die Navigation geladen angezeigt wird
4. Show Header/Footer
Legt fest, ob der Foren-Header/Footer auf der eigenen Seite mit angezeigt wird.

Wird die Seite im Editor bearbeitet, stehen sämtliche Foren-Variablen, Sprachvariablen sowie die Variablen (Data,Config und Global) des Plugins zur Verfügung

2. Template Element

Plugin-Template-Elemente fügen Template-Code an beliebigen Stellen im Forum ein. Beim Erstellen kann angegeben werden, wo genau die Einbindung erfolgen soll.

1. Template
Hier wird zunächst das Template-Element ausgewählt, dem der Plugin-Code zugeordnet wird
2. Header
Bei dieser Auswahl wird das Plugin-Element vor dem Template-Element geladen.
3. Footer
Bei dieser Auswahl wird das Plugin-Element nach dem Template-Element geladen.
4. Inline Element
Diese Einstellung ermöglich es, Plugin-Code innerhalb eines anderen Template-Elements auszuführen.
Dazu wurden in den Templates Markierungen eingefügt, die hier zur Auswahl stehen.
Je nach gewähltem Template-Element stehen unterschiedliche inline-Positionen zur Verfügung. Wird zum Beispiel das Template-Element thread flat gewählt, kann die Position message_after_last gewählt werden, um Plugin Code nach dem letzten Beitrag auf einer Seite auszuführen.
Diese Funktion ist bisher nur rudimentär implementiert - eine vollständige Liste der Inline-Positionen wird in Kürze hier verfügbar gemacht.

Wird die Seite im Editor bearbeitet, stehen sämtliche Foren-Variablen, Sprachvariablen sowie die Variablen (Data,Config und Global) des Plugins zur Verfügung.

3. Action Type

Aktion-Elemente führen Template Code immer nach bestimmten Ereignissen im Forum aus. So kann zum Beispiel nach dem bearbeiten einer Wiki-Seite durch ein Mitlgied eine PN an den Ersteller der Seite versendet werden.
Da dieser Code direkt vom Server aufgerufen wird, können Plugin-Funktionen auch mit erhöhten Rechten ausgeführt werden. Um bei dem Beispiel der Wiki-Seite zu bleiben: Normalerweise kann ein Mitglied aus Sicherheitsgründen keine Emails über die PluginApi versenden. Über die Aktion-Elemente kann es dennoch realisiert werden, dass nach einer bestimmten Aktion des Users eine Email durch das Plugin versendet wird.

Eine vollständige Liste der Aktionen, nach denen Plugin-Code ausgeführt werden kann entnehmen Sie bitte dem "Plugin Element erstellen"-Dialog in der Plugin Entwicklung.

Wird die Seite im Editor bearbeitet, stehen wie gewohnt sämtliche Foren-Variablen, Sprachvariablen sowie die Variablen (Data,Config und Global) des Plugins zur Verfügung.

Variablen
1. Konfigurationsvariablen
Konfigurationsvariablen speichern pluginspezifische Einstellungen, die nach der Installation in der Plugin-Administartion angepasst werden können
Neben Name, Titel und Beschreibung, kann ein Wert für die Gewichtung angegeben werden. Dieser bestimmt, in welcher Reihenfolge die Variablen eines Plugins angeordnet werden. Die wichtigste Einstellung ist der Typ der Variablen. Er legt fest welche Art von Wert gespeichert werden kann.
1. Integer
Zahlen ohne Kommastellen
2. Boolean
true / false Werte
3. Text
Längere Texte
4. Html-Color
Farbwert - der Wert kann über einen Colorpicker bestimmt werden
5. Chars
Kurze Zeichenfolgen
6. Fileurl
Datei-URL - es wird ein "Datein angeben oder hochladen"-Dialog generiert
7. Grouprights
Rechteeinstellungen - erzeugt eine Rechtetabelle für alle Benutzergruppen
1. 1 Integer Variable

Integer speichern Zahlenwerte. Wird für die Variable {{plugin_xobor_config_font_size}} im folgenden Beispiel mit "20" belegt wird, wird die Schrift in 20px dargestellt.

Beispiel Integer Variable im CSS Code

             p{ 
                display:none;
                font-size:{{plugin_xobor_config_font_size}}px;
                margin:20px auto;
                width:100px;
               }
          
1. 2 Boolean Variable

Ein Boolean hat nur zwei mögliche Werte: "true" oder "false" (bzw. 0 oder 1). Im folgenden Beispiel ist die Variable {{plugin_xobor_cansee_textarea}} mit dem default Wert "true" belegt. Das Ergebnis ist, dass die textarea sichtbar ist.

Beispiel Boolean Konfigurationsvariable im Java Script Code


                var k = {{plugin_xobor_cansee_textarea==true.start}}
                            1
                        {{plugin_xobor_cansee_textarea==true.else}}
                            0
                        {{plugin_xobor_cansee_textarea==true.end}};

                 if(k==false){
                       $("#text_area").hide(400);
                    }
                  else {
                       $("#text_area").show(400); 
                    } 
               
1. 3 Text Variable

In Textvariablen können beliebige Zeichenfolgen gespeichert werden. Das Beispiel zeigt die Zeichenfolge {{plugin_xobor_config_text_test}}, die in den HTML-Code eingebunden wird.

Beispiel Text-Variablen im HTML Code

 
                

{{plugin_xobor_config_text_test}}

1. 4 Color Variable

Mit einer Html-Color Variable wird ein Farbwert festgelegt. Im folgenden Beispiel wird mit den Variablen {{plugin_xobor_config_text_color}} und {{plugin_xobor_config_background_color}} der Hintergrund und die Textfarbe von Elementen der Klasse .one definiert.

Beispiel Html-Color Konfigurationsvariable im Css Code

 
                .one{
                        width:200px;
                        height:200px;
                        border: 1px solid #000000;
                        background-color:{{plugin_xobor_config_background_color}};
                        color:{{plugin_xobor_config_text_color}};     
                    }

               
1. 5 Chars Variable

Chars Variablen speichern kurze (einzeilige) Texte. Im Folgende Beispiel wird der Inhalt einer Überschrift aus der Variablen {{plugin_xobor_config_chars_title} gelesen.

Beispiel Chars Konfigurationsvariable im Html Code

                    

{{plugin_xobor_config_chars_title}}

Hier steht weiterer Text

1. 6 Fileurl Variable

Bei Fileurl-Variablen wird in der Admistration ein Datei-Upload Feld angeboten, über das der Admin eine Grafik-url angeben kann.
Im folgenden Beispiel wird in der Variablen {{plugin_xobor_config_bgicon}} der Wert "https://files.homepagemodules.de/b2001010/a_470.jpg" gepeichert und diese Grafik als Hintergrundbild verwendet.

Beispiel Fileurl Konfigurationsvariable im Css Code

                .text-test{
                      position:absolute;
                      left:871px;
                      top:300px;
                      width:200px;
                      margin:0px;
                      background-color:#000000;
                      padding:10px;
                      background-image:url({{plugin_xobor_config_bgicon}});
                      color:{{plugin_xobor_config_fontcolor}};
                 }
               
1. 7 Grouprights Variable

Über grouprights-Variablen können später Zugriffsrechte für das Plugin eingestellt werden. Für die Einstellung wird eine Tabelle analog zu anderen Rechteeinstellungen in der Administration erzeugt.
Bei der Erstellung von grouprights-Variablen kann ein Standardwert voreingestellt werden.

2. Globale Variablen

Globale Variablen werden verwendet, um Daten zu speichern, die von Plugin verwendet werden.
Die Werte von globalen Variablen stehen später auf jeder Seite des Forums zur Verfügung. Der Wert der globalen Variable "testvar" im Plugin "xobor" könnte in jedem Template-Element des Forums mit {{plugin_xobor_global_testvar}} ausgegeben werden.

Ausnahme: Es ist möglich, eine versteckte globale Variable zu erstellen. Die Werte von versteckten globalen Variablen werden später nicht automatisch zur Verfügung gestellt, können aber jederzeit per Javascript gelesen oder gespeichert werden. Versteckte Variablen sind Ressourcenschonender, da die Variable nicht bei jedem beim Seitenaufruf bereitgestellt werden muss.

Bei der Erstellung einer globalen Variable kann ausserdem festgelegt werden, welche Gruppen später die Werte der Variablen lesen bzw. schreiben dürfen. Soll dies einstellbar sein, kann der globalen Variable auch eine grouprights-Konfigurationsvariable zugeordnet werden, über die die Zugriffsrechte gesteuert werden.

Auch bei globalen Variablen kann bestimmt werden, welche Art Daten gespeichert werden kann:
1. Text
2. Integer
3. Boolean
4. Chars

2. 1 Lesen

Alle Plugin Variablen können auf zwei Arten gelesen werden: per Template-Code oder per Javascript

Beispiel Globale Variable per Template Code lesen

 
                    
{{plugin_xobor_global_testvar}}
...

In diesem Beispiel würde der Wert von {{plugin_xobor_global_testvar}} als Überschrift in einer Box angezeigt.

Beispiel Globale Variable per Javascript lesen. Hier wird die Methode getGlob() der Javascript-API verwendet

 
                    
...
<script> var heading = xobor.plugin("xobor").getGlob("testvar"); $("#headerplaceholder").html(heading);

In diesem Beispiel würde der Wert der Variable testvar aus dem Plugin xobor zunächst per Javascript gelesen und dann als Überschrift in einer Box angezeigt.

2. 2 Schreiben

Beim Schreiben einer Variablen haben wir drei Möglichkeiten:

1) Globale Variable per Template Code in einem bestehenden Formular speichern
Hierzu kann in fast jedem Post-Formular ein Input-Feld mit dem Namen der Variablen definiert werden. Der Wert wird dann beim absenden der Form automatisch gespeichert.
Dieser Weg der Speicherung klappt in allen Formularen, bei denen entweder eine "UserAction" ausgelöst, oder der Suchindex geändert wird. Details entnhemen Sie bitte der Liste der User Actions

Im Beispiel wird wieder die Variable {{plugin_xobor_global_testvar}} gespeichert

 
                    

2) Globale Variable per Template Code in einem eigenen Formular speichern
Diese Funktion wird in einer späteren Version der API bereitgestellt


3) Speicherung per Javascript. Hier wird die setGlobal-Methode der Javascript-API verwendet. Das funktioniert auf jeder Seite des Forums

 
                    
<script> function saveGlobal(){ var newval = $("#theglobal").val(); xobor.plugin("xobor").setGlob("testvar",newval); }

In diesem Beispiel würde der Wert der Variable testvar aus dem Plugin xobor beim Absenden des Forumlars per Ajax gespeichert.

3. Data Variablen

Data-Variablen werden immer in einem bestimmten Kontext gespeichert. Sie gehören zu einem Element des Forums und haben immer einen origin type und eine origin id
Der origin type ist der Typ des Elements, dem die Variable zugeordnet ist. Gehört eine Variable zum Beispiel zum Beitrag mit der ID 12345, so ist der target_type 2 (siehe Tabelle Target Types) und die target_id 12345.
Beim erstellen einer Data-Variablen muss angegeben werden, welchem Elementen-Typ die Variable zugeordnet wird.

#Name Beschreibung
1VariablennameName der data Variable
2Type Art der Daten, die in der Variable gespeichert werden sollen (Integer | Boolean | Text | Chars)
3Origin Type Typ des Elements, dem die Variable zugeordnet ist (siehe Target Types)
4Userseparated Soll für jedes Mitglied eine eigene Data-Variable angelegt werden? Siehe (Userseparated)
5doreadall_plugindefault Diese Gruppen dürfen die Variable immer lesen
Ab hier folgen die Schreib- und Leserechte
6doreadmyorigin_plugindefault Diese Gruppen dürfen die Variable lesen, wenn Sie der Ersteller des zugerodneten Elements sind
7doreadmyvar_plugindefault Diese Gruppen dürfen die Variable lesen, wenn sie sie selbst erstellt haben
8docreate_plugindefault Diese Gruppen dürfen die Variable erstellen, wenn Sie vorher nicht existierte
10docreatemyorigin_plugindefault Diese Gruppen dürfen die Variable erstellen, wenn Sie vorher nicht existierte und Sie der Ersteller des zugeordneten Elements sind
11dochangeall_plugindefault Diese Gruppen dürfen die Variable immer bearbeiten, sofern Sie bereits vorher angelegt wurde
12dochangemyorigin_plugindefault Diese Gruppen dürfen die Variable bearbeiten, wenn Sie der Ersteller des zugerodneten Elements sind
12dochangemyvar_plugindefault Diese Gruppen dürfen die Variable bearbeiten, wenn sie sie selbst erstellt haben

Schreib und Leserechte können den verschiedenen Standardgruppen zugewiesen werden (Gäste/Mitglieder/Moderatoren/Admins/Alle). Für eine genauere Rechteeinstellung kann aber auch eine grouprights-Variable angegeben werden, über die die Zugriffsrechte gesteuert werden können

3. 1 Lesen

Alle Plugin Variablen können auf zwei Arten gelesen werden: per Template-Code oder per Javascript
Der Wert von Data-Variablen steht immer dann zur Verfügung, wenn Inhalte vom Typ (origin_type) dem die Variable zugewiesen ist auf der Seite angezeigt werden. Ist z.B. die Variable {{plugin_xobor_testdatavar}} dem origin_type 2 (Beitrag) zugeordnet, kann innerhalb der {{messages}}-Schleife auf den Wert zugegriffen werden.

Beispiel Data Variable per Template Code lesen

 
                    
Nachrichten
{{messages.starlist}} {{messages:plugin_xobor_testdatavar==true.start}} Zur Nachricht {{message:id}} wurden folgende Daten gespeichert: {{messages:plugin_xobor_testdatavar}} {{messages:plugin_xobor_testdatavar==true.end}} {{messages.end}}

In diesem Beispiel wird innerhalb der Schleife {{messages}} auf den Wert von {{plugin_xobor_global_testvar}} zugegriffen. Falls der Wert gesetzt ist wird ein entsprechender Text ausgegeben.

Beispiel Data Variable per Javascript lesen

 
               <script>var comments = [];
               
                    
Nachrichten
{{messages.starlist}} ...Hier Nachricht anzeigen... <script>xobor.plugin("xobor").getDataVar("testvar",function(res){comments.push(res)}); {{messages.end}}

In diesem Beispiel würde der Wert von der Variablen testvar des Plugins xobor bei jeder Nachricht gelesen und in einen Array comments gespiechert werden.

3. 2 Schreiben

Auch beim Schreiben einer Data-Variablen haben wir wieder drei Möglichkeiten. Da data-Variablen immer einem bestimmten Element zugeordnet werden, müssen beim Javascript-Aufruf die Werte target_type und target_id gesetzt werden.

1) Data Variable per Template Code in einem bestehenden Formular speichern
Hierzu kann in fast jedem Post-Formular ein Input-Feld mit dem Namen der Variablen definiert werden.
Origin Type und Origin ID werden in diesem Fall von der Forensoftware ergänzt.
Der Wert wird dann beim absenden der Form automatisch gespeichert.
Dieser Weg der Speicherung klappt in allen Formularen, bei denen entweder eine "UserAction" ausgelöst, oder der Suchindex geändert wird. Details entnehmen Sie bitte der Liste der User Actions

Im Beispiel wird wieder die Variable {{plugin_xobor_testdatavar}} gespeichert

 
                    

2) Data Variable per Template Code in einem eigenen Formular speichern
Diese Funktion wird in einer späteren Version der API bereitgestellt


3) Speicherung per Javascript. Hier wird die setDataVar-Methode der Javascript-API verwendet. Das funktioniert auf jeder Seite des Forums
Wichtig ist, dass hier target_type und target_id als Parameter mit angegeben werden müssen
Soll zum Beispiel die Variable testvar zum Beitrag (=target_type 2) mit der ID 12345 gespeeichert werden, könnte der Code so aussehen:

 
                    
<script> function saveVar(){ var newval = $("#thedatavar").val(); xobor.plugin("xobor").setDataVar("testvar",2,12345,newval); }

In diesem Beispiel würde der Wert der Variable testvar aus dem Plugin xobor beim Absenden des Forumlars per Ajax gespeichert.

3. 3 Userseparated

Wird eine Data-Variable als userseparated gekennzeichnet, wird für jedes Element nicht nur eine Data-Variable, sondern eine Data-Variable je Mitglied angelegt. So könnte man zum Beispiel ein "Notizen"-Plugin erstellen, bei dem jedes Mitglied zu jedem Beitrag eigene Notizen speichern kann. Dazu wird lediglich eine userseparated Data-Variable mit dem origin_type 2 (Beiträge) benötigt. Hinweis: Diese Funktion kann gerne getestet werden, ist allerdings bisher nur rudimentär implementiert

Tipps & Tricks
1. Sonstiges

Allgemeine Hinweise für die Entwicklung von Plugins

1. 1 Kapselung
Sämtlicher in JavaScript geschriebener Code eines Plugins, wird auf den definierten Seiten (bzw. Templates) direkt ausgegeben. Aus diesem Grund ist es wichtig, dass Variablennamen eindeutig definiert und nicht durch andere ausversehen überschrieben werden können. Im gleichen Atemzug ist der Pluginentwickler verpflichtet darauf zu achten, dass dieser nicht eine bereits bestehende Variable anderer Scripte überschreibt.

Da es mitunter etwas schwierig sein kann dies herauszufinden, sollte schon von Anfang an eine Struktur überlegt werden!
Aus diesem Grund stellen wir euch hier ein kleines „Skeleton“ vor, welches dieses Problem geschickt lösen kann.
Wir gehen davon aus, dass unsere Pluginid „testplugin“ ist und unser Plugin hauptsächlich JS-Code enthält.
// da die ID unserer Plugins "testplugin" ist, nennen wir die Variable dementpsrechend
var plugin_testplugin = new function() {
	// eine Referenz auf sich selbst!
	var self = this;
	// so definiert man eine Variable!
	self.version = '1.000 rc0';
	// Auch Objects usw. sind kein Problem!
	self.config = {
		color: 		'orange',
		fontSize: 	16,
		fontWeight:	'bold'
	};
	// Es ist gut wenn man ein wenig Struktur in seinen Code bringt!
	// Also sortieren wir allgemeine Funktionen die wir benötigen hier ein
	self.helperFunctions = {
		sayHello: function(name) {
			if (typeof name === 'undefined' || !name) {
				name = 'Gast';
			}
			var text = 'Hello '+name;
			alert(text);
			self.helperFunctions.printToDoc(text);
		},
		printToDoc: function(string) {
			if ($('#testplugin').length) {
				$('#testplugin').html(string);
			} else {
				$('body').prepend('
'+string+'
'); } } }; // eine initialfunction // in dieser initialfunction kommt der ausführende Code // mit dem Document ready state stellen wir sicher, dass die Seite komplett // geladen ist self.run = function() { $('document').ready(function(){ self.helperFunctions.sayHello(prompt('Wie lautet dein Name?')); }); }; } // jetzt müssen wir unser Programm nur noch ausführen! plugin_testplugin.run();
Wie man leicht erkennen kann, umgeht man durch diese triviale Struktur einen möglichen Namenskonflikt mit bereits existierenden Variablen oder Funktionsnamen.
1. 2 Target Types

Einige Plugin-Funktionen benötigen den target_type eines Elements. Dieser legt fest, um welche Art von Inhalt es sich handelt. Hier finden Sie eine vollständige Tabelle der verfügbaren target types.
Für den Aufruf der API-Funktionen wird in der Regel der numerische Wert benötigt.

KlarnameID Kürzel
Thema1 forum_topic
Beitrag2 forum_message
Benutzerprofil3 user_profile
Gästebuch-Eintrag4 usergbook_message
Mitglieder-Login5 user_login
Bilderalbum10gallery_cat
Bild11gallery_picture
Ort (in der Landkarte)20geomap_location
Ereignis (Kalender)30calendar_event
Tag31calendar_day
Ereignis-Kommentar35calendar_comment
Blog Artikel32blog_entry
Blog Kommentar33blog_comment
Bild-Kommentar12gallery_picture_comment
Bewertung50rating
Wiki Seite60wiki_page
Wiki Revision61wiki_page_revision
Activity Feed Eintrag70feed_entry
Benutzeraktion77user_action
1. 3 User Actions

Eine vollständige Liste aller "User Actions" des Forums:

Thema erstellen
Beitrag erstellen
Registrieren
Login
Bilderalbum erstellen
Bild hochladen
Bild-Kommentar erstellen
Ort (in der Landkarte) eintragen
Ereignis eintragen (Kalender)
Ereignis-Kommentar (Kalender)
Blog Artikel erstellen (Forenblog oder Nutzerblog)
Blog Kommentar erstellen
Bewertung abgeben
Wiki Seite erstellen/bearbeiten
1. 4 Template Funktionen

In den Plugin-Template Elementen können alle aus der Template-Entwicklung bekannten Funktionen verwendet werden. Selbstverständlich werden auch alle Foren-Variablen (gekennzeichnet durch 2 geschweifte Klammern {{varname}}) und alle Sprachvariablen ({[sprachvariable]}) unterstützt.
Hinweis: Bei der verwendung von Sprachvariablen in einem Plugin sollte beachtet werden, dass später nur die in den Foren verfügbaren Sprchvariablen verwendet werden. Nutzen Sie daher ausschließlich die Xobor Standard Sprachvariablen, um Anzeigeprobleme im Voraus auszuschließen.

Übersich über die Template-Funktionen

Conditional Statements: Ist / Ist nicht / enthält / beginnt / endet

                    {{testvar==true.start}} ... {{testvar==true.end}} -> {{testvar}} ist == true, oder auch == false
                    {{testvar==true.start}} ...{{testvar==true.else}} ... {{testvar==true.end}} -> {{testvar}} ist == true ... else ...
                    ! {{testvar==a.start}} ... {{testvar==a.end}} -> {{testvar}} ist ==a
                    ! {{testvar==a|b.start}} ... {{testvar==a|b.end}} -> {{testvar}} ist ==a oder ==b (beliebig oft | verwendbar)
                    ! {{testvar~=a|b.start}} ... {{testvar~=a|b.end}} -> {{testvar}} enthält a (oder optional b)
                    ! {{testvar^=a|b.start}} ... {{testvar^=a|b.end}} -> {{testvar}} beginnt mit a (oder b)
                    ! {{testvar$=a|b.start}} ... {{testvar$=a|b.end}} -> {{testvar}} endet mit a (oder b)
                    ! {{testvar!==a|b.start}} ... {{testvar!==a|b.end}} -> {{testvar}} ist NICHT ==a oder ==b (beliebig oft | verwendbar)
                    ! {{testvar!~=a|b.start}} ... {{testvar!~=a|b.end}} -> {{testvar}} enthält NICHT a (oder optional b)
                    ! {{testvar!^=a|b.start}} ... {{testvar!^=a|b.end}} -> {{testvar}} beginnt NICHT mit a (oder b)
                    ! {{testvar!$=a|b.start}} ... {{testvar!$=a|b.end}} -> {{testvar}} endet NICHT mit a (oder b) 
            

Variablen anlegen:

                {{varname.start}} ... {{varname.end}} -> Standard-Variablenbelegung
                {{varname.startint}} ( {{var2}} % 2) {{varname.end}} - Variable mit Mathematik Operationen setzen
            

Template-Methoden:

                    {{a|printalot("b")}}
                    Gibt a-Mal den String b wieder. Einsatzweck: Anzeige von Ebenen in Select-Boxen o.ä.
                    {{a|numberformat}}
                    Formatiert eine Zahl a entsprechend der lokalen eingenarten - Beispiel 1000 wird zu 1.000
                    {{a|dateformat}}
                    Formatiert einen Unix Timestamp (time()) a entsprechend der lokalen eigenarten
                    {{a|dateformat(Y-m-d)}}
                    Formatiert einen Unix-Tmestamp nach dem übergebenem Format (siehe auch http://www.php.net/date )
                    {{a|shortstring(b,"...")}}
                    Gibt die ersten b Zeichen des Strings a wieder und fügt ... an, falls tatsächlich gekürzt wurde
                    {{a|urlencode}}
                    Wandelt den String a für die Übermittlung per GET Parameter um
                    {{a|jsescape}} oder {{schleife:a|jsescape}}
                    Wandelt den String a für die Übermittlung als javascript var xyz = "{{blubb|jsescape}}"; um.
                    {{a|gettranslation(b)}}
                    Lädt alle Sprachvariabeln mit b_* vor und gibt zur Laufzeit die Übersetzung der Sprachvariable mit b_{{a}} aus. Einsatzzweck z.B. {{monate:monat|gettranslation(month)}} für den Fall, dass {{monate:monat}} z.B. den Wert "month_1" hat, wird hier die Übersetzung von der Sprachvariable "month_1" angezeigt.
                    {{schleife|filter(neueschleife, filterfeldname==filterwert[, max])}}
                    Erzeugt eine neue Schleife {{neueschleife:startlist}} .. in der Alle Elemente aus {{schleife.startlist}} enthalten sind, welche für das element {{schleife:filterfeldname}} den Wert "filterwert" haben. Der Wert max ist optional - es werden maximal max Aktionen in der neuen Schleife gespeichert.
                    {{schleife|filter(neueschleife, filterfeldname!=filterwert[, max])}}
                    Wie oben nur mit allen elementen NOT IN Filterwert                    
            
Legende:
! Funktioniert nicht mit Schleifen (z.B. {{varname^=true.start}} aber nicht {{schleife:varname^=true.start}})

Javascript API

Alle Funktionen des Pluginsystems können auch per Javascript angesprochen werden. In erster Linie werden Funktionen zum Schreiben und Lesen der verschiedenen Arten von Forenvariablen bereitgestellt. Über die "call()"-Funktion können auch einige sehr spezielle Forenaktionen ausgeführt werden.

Beispiel Aufruf einer API-Funktion

            xobor.plugin("PluginID").funktionsname();
          
1. xobor.plugin

Alle Funktionen des Pluginsystems können auch per Javascript angesprochen werden. In erster Linie werden Funktionen zum Schreiben und Lesen der verschiedenen Arten von Forenvariablen bereitgestellt. Über die "call()"-Funktion können auch einige sehr spezielle Forenaktionen ausgeführt werden.

Beispiel Aufruf einer API-Funktion

            xobor.plugin("PluginID").funktionsname(parameter);
          
1. 1 localstorage
Mit den Funktionen des LocalStorage Objektes, kann der Entwickler problemlos auf diesen zugreifen

Hinweis: Sollte ein Plugin (welches den LocalStorage verwendet) für die Veröffentlichung in unserem Store eingereicht werden, so darf der Zugriff auf den LocalStorage ausschließlich über die drei folgenden Funktionen geschehen.
Diese stellen sicher, dass es zu keinen Namenskonflikten mit anderen Scripten oder Plugins kommen kann.
        /*  Einen Wert holen
            Erwartet einen Key als String
            Gibt den Wert oder das Boolesche false zurück!
        */
        xobor.plugin("PLUGINID").localstorage.get(Key);

        /*  Einen Wert setzen
            Erwartet einen Key als String und ein Value als mixed
            Gibt bei Erfolgreicher Speicherung das Boolesche true und bei einem Fehler das Boolesche false zurück.
        */
        xobor.plugin("PLUGINID").localstorage.set(Key, Value);

        /*  Einen Wert löschen
            Erwartet einen Key als String
            Gibt bei Erfolg das Boolesche true zurück.
        */
        xobor.plugin("PLUGINID").localstorage.del(Key);
    
Tipp: Mit unserer API können auch komplette JS-Objects und Arrays in einem LocalStorage-Key abgelegt werden!
Das CookieObject stellt Methoden für den Zugriff auf Browsercookies bereit.

Hinweis: Sollte ein Plugin (welches BrowserCookies verwendet) für die Veröffentlichung in unserem Store eingereicht werden, so darf der Zugriff auf die BrowserCookies ausschließlich über die drei folgenden Funktionen geschehen.
Diese stellen sicher, dass es zu keinen Namenskonflikten mit anderen Scripten oder Plugins kommen kann.
        /*  Einen Wert holen
            Erwartet einen Key als String
            Gibt den Wert oder das Boolesche false im Fehlerfall zurück.
        */
        xobor.plugin("PLUGINID").cookie.get(Key);

        /*  Einen Wert setzen
            Erwartet einen Key als String, Value als String und eine Ttl(Time to live) als int (in Tagen)
            Gibt bei Erfolg das Boolesche true oder bei Misserfolg das Boolesche false zurück.
            Kann auch einen Fehler als String zurückliefern!
        */
        xobor.plugin("PLUGINID").cookie.set(Key, Value, Ttl);

        /*  Einen Wert löschen
            Erwartet einen Key als String
            Gibt das Boolesche true zurück
        */
        xobor.plugin("PLUGINID").cookie.del(Key);

    
1. 3 getDeep()

Mit der getDeep()-Funktion können Informationen zu beliebigen Foren-Elementen geladen werden. Für den Funktionsaufruf werden lediglich Die target_id, sowie der target_type des Elements benötigt.
Hinweis:Eine Liste der target_types finden sie hier

Aufruf der getDeep()-Funktion

            xobor.plugin("PluginID").getDeep(idata,returnfunction);
          
           Parameter: 
idata = Objekt mit den Elementinformationen, die ergänzt werden sollen. Es müssen mindestens die Werte target_id und target_type gesetzt werden. returnfunction = hier wir die Funktion angegeben, die den Rückgabewert erhält.
Beispiel: Im Plugin mit der ID "modcomment" sollen die Nutzer-Informationen eines Mitglieds abgefragt werden. Dazu werden mindestens die target_id (also in diesem Fall die ID des Mitglieds), sowie der target_type benötigt. Ein Blick in die target_type Tabelle verrät, dass ein Benutzerprofil den target_type 3 hat.
     
                var idata = {target_id: "12345", target_type: "3"}
                xobor.plugin("modcomment").getDeep(idata,function(res){alert(res.uname);});
           
Die Funktion ruft alle verfügbaren Daten zum Mitglied 12345 ab und zeigt den Benutzernamen in einem alert-Fenster. Ein genaue Angabe der verfügbaren Daten würde an dieser Stelle zu weit führen - loggen Sie das Resultat in die Console des Browsers für mehr Details.

Hinweis: Mit der getDeep()-Funktion können Abfragen auf quasi den gesamten Datenbestand des Forums durchgeführt werden. Selbstverständlich werden dabei die Zugriffsrechte des Forums weiterhin beachtet. Denken Sie daran, dass jede Abfrage natürlich auch Ressourcen kostet und die Ladezeit verlängert. Verwenden Sie getDeep() sparsam.

Listen:
Die API unterstützt auch die Abfrage von mehreren Elementen auf einmal. Werden zum Beispiel die Daten mehrerer Mitglieder benötigt, können diese mit einem Ajax-Call abgefragt werden. Dazu wird statt einer einzelnen Id einfach ein Array mit Ids angegeben.
     
            //In diesem Beispiel werden die Daten zu vier Mitgliedern gleichzeitig abgerufen.
                var idata = {target_id: "[12345,54321,98765,56789]", target_type: "3"}
                xobor.plugin("modcomment").getDeep(idata,function(res){
                        $.each(res,function(){alert(this.uname)}));
                });
           
1. 4 getDeepList()

Die getDeepList()-Funktion stellt für einige Sonderfälle besonders performante Spezialabfragen bereit.


1. Mitgliederliste

Aufruf der getDeepList()-Funktion aus dem modcomment-Plugin, um die Mitgliederliste abzurufen
Im Beispiel wird die Anzahl der Mitglieder des Forums in einem Popup angezeigt

            /*
            Optionale Parameter
                order (ASC|DESC)
                orderby (name|id|usertitle)
                limit (int,"all")
            */
            
            idata = {target_type : 3, limit : "all"}
            xobor.plugin("modcomment").getDeepList(idata,function(res){
                alert(Object.keys(res).length + " Mitglieder im Forum")
            });
          
2. Weitere deepList-Funktionen folgen...
1. 5 setGlob()

Die setGlob()-Funktion ändert den Wert einer globalen Variablen


        /*Parameter
        varname:    der Name der Varablen, die gespeichert werden soll
            val:   der neue Wert der Variablen
        callback:   Callback-Funktion*/          
        
        function xobor.plugin("pluginID").setGlob(varname,val,callback)

Aufruf der setGlob()-Funktion aus dem modcomment-Plugin, um die Variable comment zu überschreiben

            var newval = $("#comment").val();
            xobor.plugin("modcomment").setGlob("comment",newval,function(res){
                alert("Kommentar gespeichert");
            });
          
1. 6 getGlob()

Die getGlob()-Funktion ruft den Wert einer globalen Variablen ab


        /*Parameter
        varname:    der Name der Varablen, die abgefragt wird
        editable:   ist dieser Wert auf true (1) gesetzt, gibt die Funktion bei
                    Variablen mit HMTL oder BB-Code den ungeparsten Wert der Variablen zurück
        callback:   Callback-Funktion*/          
        
        function xobor.plugin("pluginID").getGlob(varname,editable,callback)

Aufruf der getGlob()-Funktion aus dem modcomment-Plugin, um die Variable comment abzurufen

            xobor.plugin("modcomment").getGlob("comment",0,function(res){
                alert("Kommentar: " + res);
            });
          
1. 7 getConf()

Die getConf()-Funktion ruft den Wert einer Konfigurations-Variablen ab


        /*Parameter
        varname:    der Name der Varablen, die abgefragt wird        
        callback:   Callback-Funktion*/          
        
        function xobor.plugin("pluginID").getConf(varname,callback)

Aufruf der getConf()-Funktion aus dem modcomment-Plugin, um die Variable comment_icon abzurufen.

            xobor.plugin("modcomment").getConf("comment_icon",function(res){
                $("<img src='"+res+"' />").appendTo($commentbox);
            });
          
1. 8 getDataVar()

Die getDataVar()-Funktion ruft den Wert einer Data-Variablen ab


        /*Parameter
        varname:    der Name der Variablen, die abgefragt wird        
        originType: der Element-Typ, dem die Variable zugeordnet ist
        originid:   die Id des Elements, dem die Variable zugeordnet ist
        callback:   Callback-Funktion
        userseperatedID:   wird später implementiert        
        */          
        
        xobor.plugin("pluginID").getDataVar(varname, originType, originid, callbackfn, userseperatedID)
        

Aufruf der getDataVar()-Funktion aus dem modcomment-Plugin, um die Variable comment abzurufen, die einem Beitrag zugeordnet ist.

          var origin_id = 12345; //ID des Beitrags
          var origin_type = 2; //siehe target_type Tabelle
            xobor.plugin("modcomment").getDataVar("comment",origin_type,origin_id,function(res){
                alert("Kommentar: " + res);
            });
          
1. 9 setDataVar()

Die setDataVar()-Funktion ändert den Wert einer Data-Variablen


        /*Parameter
        varname:    der Name der Variablen, die abgefragt wird        
        originType: der Element-Typ, dem die Variable zugeordnet ist
        originid:   die Id des Elements, dem die Variable zugeordnet ist
        val:        der neue Wert der Variablen
        userseperatedID:   wird später implementiert                
        callback:   Callback-Funktion
        
        */          
        
        function xobor.plugin("pluginID").setDataVar(varname, origin_type, origin_id, val, callbackfn, userseperatedID)

Aufruf der setDataVar()-Funktion aus dem modcomment-Plugin, um die Variable comment für einen bestimmten Beitrag anzupassen.

          var beitrags_id = 12345; //ID des Beitrags
          var origin_type = 2; //siehe target_type Tabelle
          var newval = "Ich bin ein Kommentar";
            xobor.plugin("modcomment").setDataVar("comment",origin_type,beitrags_id,newval,function(res){
                alert("Kommentar: " + res);
            });
          
1. 10 delDataVar()

Die delDataVar()-Funktion löscht eine Data-Variable.


        /*Parameter
        varname:    der Name der Variablen, die abgefragt wird        
        originType: der Element-Typ, dem die Variable zugeordnet ist
        originid:   die Id des Elements, dem die Variable zugeordnet ist        
        userseperatedID:   wird später implementiert                
        callback:   Callback-Funktion
        
        */          
        
        function xobor.plugin("pluginID").delDataVar(varname, origin_type, origin_id, val, callbackfn, userseperatedID)

Aufruf der delDataVar()-Funktion aus dem modcomment-Plugin, um die Variable comment für einen bestimmten Beitrag zu löschen.

          var beitrags_id = 12345; //ID des Beitrags
          var origin_type = 2; //siehe target_type Tabelle          
            xobor.plugin("modcomment").setDataVar("comment",origin_type,beitrags_id,function(res){
                alert("Kommentar gelöscht");
            });
          
1. 11 call()

Die call()-Funktion ermöglicht den aufruf einiger PHP-Funktionen sowie spezieller Plugin-Funktionen über die javascript API. Die angebotenten Funktionen werden laufend ergänzt.


1. Email versenden

Die sendmail()-Funktion ermöglich es Administratoren, Emails über die Plugin-API zu versenden.

            /*
            Parameter
                userid (Mitglied an das die Nachricht gesendet werden soll)
                mailtitle (Betreffzeile der Email)
                mailboy (Inhalt der Email)
                
                Tipp: Um Leerzeilen im Mailbody zu erzeugen, muss der Javascript Zeilenumbruch \n verwendet werden.
            */
            
            maildata = {    
                userid : 1234, 
                mailtitle : "Neue Leserechte", 
                mailbody : "Hallo Peter\n\nDu bist nun in der Gruppe "Dauergäste" und hast weitere Leserechte bekommen"};
                            
            xobor.plugin("modcomment").call("sendmail",maildata,function(res){
                alert("Email versendet");
            });
          

2. Benutzertitel ändern

Die setUserTitle()-Funktion ermöglicht es Administratoren Benutzertitel einzelner Mitglieder zu ändern. So können zum Beispiel aus einem Plugin heraus neue Benutzertitel für bestimmte Aktionen vergeben werden

            /*
            Parameter
                uid (Mitglied dessen Benutzertitel angepasst werden soll)
                title (Der neue Titel - darf auch HTML-Code enthalten)
                getcurrent (Ist dieser Wert auf true, gibt die Funktion den aktuellen Titel als Rückgabewert "oldtitle" zurück)
                fixed (Soll ein statischer Titel verwendet werden, muss dieser Parameter auf true stehen. Wird hier ein false übertragen, wird der Titel automatisch nach der Punktezahl des Mitglieds berechnet)                               
            */
            
            titledata = {    
                userid : 1234, 
                title : "Vielschreiber",
                getcurrent : 1
                fixed : 1
            }    
                            
            xobor.plugin("modcomment").call("setUserTitle",titledata,function(res){
                alert("Titel geändert. Alt:"+res.oldtitle+" Neu: " + titledata.title);
            });
          

3. BBCode umwandeln

Die bbcodeLive()-Funktion wandelt unter Berücksichtigung der Forencodes BBCode in HTML um

            /*
            Parameter
                text (BB-Code zum Umwandeln)                
            */
            
            translate = {    
                text : "[b]Ich bin eine Überschrift[/b]", 
            }    
                            
            xobor.plugin("modcomment").call("bbcodeLive",translate,function(res){
                $("#preview").html(res);
            });
          
4. Moderator ernennen

Die setModerator()-Funktion ermöglicht es, neue Moderatoren zu ernennen

            /*
            Parameter
                newModID (der Nutzer, der Moderator werden soll)                
                templateModID (ID eines Moderators, von dem die Rechte übernommen werden sollen)
            */
            
            moddata = {    
                newModID : 12345, 
                templateModID : 54321
            }    
                            
            xobor.plugin("modcomment").call("setModerator",moddata,function(res){
                alert("Moderator hinzugefügt");
            });
          

5. Moderator entfernen

Die delModerator()-Funktion entzieht einem Mitglied die Moderatorenrechte

            /*
            Parameter
                userid (der Moderator, dessen Rechte entfernt werden)                                
            */
            
            moddata = {    
                userid : 12345,                 
            }    
                            
            xobor.plugin("modcomment").call("delModerator",moddata,function(res){
                alert("Moderator entfernt");
            });
          

6. Rechte überprüfen

Die checkRights()-Funktion gibt die Lese und Schreibrechte für eine Data-Variable zurück

            /*
            Parameter
                origintype (Element Type, dem die Variable zugeordnet ist)                                
                originid (Element, dem die Variable zugeordnet ist)                                
                varname (Name der Variablen)                                
                seperatedid (User, dem die Variable zugeordnet ist (optional))                                
            Rückgabe
                array("read","write","create")
            */
            
            vardata = {    
                origintype : 1, //Beitrag
                originid : 123456 //Beitrags-Id
                varname : "comment" //
            }    
                            
            xobor.plugin("modcomment").call("checkRights",vardata,function(res){
                if(res.read){alert("Leserechte vorhanden");}
            });
          

7. Benutzergruppe ändern

Die moveToGroup()-Funktion verschiebt ein Mitglied in eine andere Gruppe. Kann nur mit Administrationsrechten aufgerufen werden.

            /*
            Parameter
                userid (Id des Mitglieds, dass verschoben werden soll)                                
                targetgroup (Id der gruppe, in die das Mitglied verschoben werden soll)                                                
            */
            
            vardata = {    
                userid : 12345,
                targetgroup : 54321
            }    
                            
            xobor.plugin("modcomment").call("moveToGroup",vardata,function(res){
                alert("benutzer verschoben");
            });
          

8. Benutzervariablen abrufen

Die userDataVarList()-Funktion ermöglicht es, Data-Variablen von verschiedenen Mitgliedern abzurufen (sofern Rechte vorhanden sind).

            /*
            Parameter
                varname (Name der Variablen)                                
                origin_type (Element Typ, dem die Variable zugeordnet ist)
                origin_id (Id des Elements, dem die Variable zugeordnet ist)
            */
            
            vardata = {    
                varname : "comment",
                origin_type : "2" //Beitrag
                origin_id : 123454 //Beitrags-Id                
            }    
                            
            xobor.plugin("modcomment").call("userDataVarList",vardata,function(res){
                alert("Wert der Variablen " +vardata.varname+ ": " + res);
            });
          

9. Plugin Metadaten

Die getmeta()-Funktion ruft einige Metadaten des Plugins ab.

            /*
            Parameter
                keine
            Rückgabewerte:
                title : Titel des Plugins
                logourl : URL des Pluginlogos
                description : Beschreibung des Plugins
                author_name : Name des Erstellers
                author_link : Homepage des Erstellers
                version : Plugin-Version
                installedfrom : Id des Admins, der das Plugin installiert hat
                installdate : Datum der Installation
            */
            
                            
            xobor.plugin("modcomment").call("getmeta",function(res){
                createPluginCopyright(res);
            });
          
1. 12 log()

Die log()-Funktion ermöglicht es, Informationen in die Konsiole des Browsers zu loggen. Im Gegensatz zu console.log wird hier sichergestellt, dass keine Javascript-Fehler auftreten, falls keine Konsole verfügbar ist


        
        function xobor.plugin("pluginID").log(text)

Aufruf der log()-Funktion aus dem modcomment-Plugin, um den Text "Fehler - Variablendaten können nicht geladen werden" auszugeben.

      
            var text = "Fehler - Variablendaten können nicht geladen werden";
            xobor.plugin("modcomment").log(text);
            
            Konsolen Ausgabe:
            >>Plugin modcomment meldet: Fehler - Variablendaten können nicht geladen werden
          
2. xobor.global
Liefert globale Einstellungen zurück.

Unter xobor.global werden in Zukunft weitere globale Informationen bereitsgestellt


2. 1 userid

Ruft die ID des Mitglieds vom Server ab


        
        function xobor.global.userid()

Gibt die aktuelle UserID zurück.

3. xobor.config

Unter xobor.config können Einstellungen vorgenommen wereden, die das gesamte Pluginsystem betreffen.


3. 1 ajaxAsync

Die ajaxAsync-Einstellung legt fest, ob Ajax-Aufrufe aus der API synchron oder asynchron erfolgen.


        
        xobor.config.ajaxAsync

Gibt true zurück, wenn die Aufrufe asynchron verlaufen.

                  
            var async = xobor.global.ajaxAsync             
          
3. 2 setAjaxAsync()

Mit der setAjaxAsync()-Funktion kann der wert für xobor.config.ajaxAsync geändert werden.


        
        xobor.config.setAjaxAsync(newval)
   
            //momentane Einstllung abfragen
            var async = xobor.global.ajaxAsync;             
            
            //Falls nicht asynchron, Einstellung ändern
            if(!async){xobor.config.setAjaxAsync(true);}
          
Tutorials

Hier finden Sie einige Beispiele für die Entwicklung von Plugins

1. Einfach

Das Plugin "Hide Votes" versteckt die Umfrageergebnisse bis zum Ende einer Umfrage

Ein Tutorial zum Aufbau des Plugins gibt es hier

2. Fortgeschritten

Das Plugin "Notizen für Moderatoren" ermöglicht es, Notizen zu Beiträgen oder Benutzerprofilen zu speichern

Ein Tutorial zum Aufbau des Plugins gibt es hier