Dokumentation der Xobor Plugin API
Forum erstellenWillkommen 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
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
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.
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:
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
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. TemplateHier 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.
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.
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
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; }
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); }
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}}
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}}; }
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
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}}; }
Ü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.
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
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.
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.
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 |
1 | Variablenname | Name der data Variable |
2 | Type | Art der Daten, die in der Variable gespeichert werden sollen (Integer | Boolean | Text | Chars) |
3 | Origin Type | Typ des Elements, dem die Variable zugeordnet ist (siehe Target Types) |
4 | Userseparated | Soll für jedes Mitglied eine eigene Data-Variable angelegt werden? Siehe (Userseparated) |
5 | doreadall_plugindefault | Diese Gruppen dürfen die Variable immer lesen |
Ab hier folgen die Schreib- und Leserechte | ||
6 | doreadmyorigin_plugindefault | Diese Gruppen dürfen die Variable lesen, wenn Sie der Ersteller des zugerodneten Elements sind |
7 | doreadmyvar_plugindefault | Diese Gruppen dürfen die Variable lesen, wenn sie sie selbst erstellt haben |
8 | docreate_plugindefault | Diese Gruppen dürfen die Variable erstellen, wenn Sie vorher nicht existierte |
10 | docreatemyorigin_plugindefault | Diese Gruppen dürfen die Variable erstellen, wenn Sie vorher nicht existierte und Sie der Ersteller des zugeordneten Elements sind |
11 | dochangeall_plugindefault | Diese Gruppen dürfen die Variable immer bearbeiten, sofern Sie bereits vorher angelegt wurde |
12 | dochangemyorigin_plugindefault | Diese Gruppen dürfen die Variable bearbeiten, wenn Sie der Ersteller des zugerodneten Elements sind |
12 | dochangemyvar_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
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.
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.
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
Allgemeine Hinweise für die Entwicklung von Plugins
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('Wie man leicht erkennen kann, umgeht man durch diese triviale Struktur einen möglichen Namenskonflikt mit bereits existierenden Variablen oder Funktionsnamen.'+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();
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.
Klarname | ID | Kürzel |
Thema | 1 | forum_topic |
Beitrag | 2 | forum_message |
Benutzerprofil | 3 | user_profile |
Gästebuch-Eintrag | 4 | usergbook_message |
Mitglieder-Login | 5 | user_login |
Bilderalbum | 10 | gallery_cat |
Bild | 11 | gallery_picture |
Ort (in der Landkarte) | 20 | geomap_location |
Ereignis (Kalender) | 30 | calendar_event |
Tag | 31 | calendar_day |
Ereignis-Kommentar | 35 | calendar_comment |
Blog Artikel | 32 | blog_entry |
Blog Kommentar | 33 | blog_comment |
Bild-Kommentar | 12 | gallery_picture_comment |
Bewertung | 50 | rating |
Wiki Seite | 60 | wiki_page |
Wiki Revision | 61 | wiki_page_revision |
Activity Feed Eintrag | 70 | feed_entry |
Benutzeraktion | 77 | user_action |
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 |
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 FilterwertLegende:
! Funktioniert nicht mit Schleifen (z.B. {{varname^=true.start}} aber nicht {{schleife:varname^=true.start}})
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();
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);
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!
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);
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.
var idata = {target_id: "12345", target_type: "3"} xobor.plugin("modcomment").getDeep(idata,function(res){alert(res.uname);});
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)})); });
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...
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"); });
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); });
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); });
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); });
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); });
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"); });
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"); });
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); });
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); });
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"); });
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"); });
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");} });
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"); });
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); });
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); });
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
Unter xobor.global werden in Zukunft weitere globale Informationen bereitsgestellt
Ruft die ID des Mitglieds vom Server ab
function xobor.global.userid()
Gibt die aktuelle UserID zurück.
Unter xobor.config können Einstellungen vorgenommen wereden, die das gesamte Pluginsystem betreffen.
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
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);}
Hier finden Sie einige Beispiele für die Entwicklung von Plugins
Das Plugin "Hide Votes" versteckt die Umfrageergebnisse bis zum Ende einer Umfrage
Ein Tutorial zum Aufbau des Plugins gibt es hier
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