Im folgenden Beispiel wird die Entwicklung des Plugins "Close Old Threads" beschrieben.
0) Anforderungen
Oft passiert es, dass gerade neue Mitglieder ein altes Thema über die Suchfunktion auffinden und dort posten, obwohl bereits eine lange Zeit kein Beitrag mehr in diesem Thema geschrieben wurde. Für den Administrator ist es aber unzumutbar, ständig das Forum zu kontrollieren, um alte Beiträge zu schließen. Das neue Plugin soll dem Admin diese Arbeit abnehmen und beim Aufruf eines Themas automatisch prüfen, ob ein Thema zu alt ist oder nicht. Für Themen die ein bestimmtes Alter überschritten haben, kann ein Warnhinweis angegeben werden, noch ältere Themen werden komplett geschlossen.
Der Administrator soll festlegen können, nach wie vielen Tagen eine Warnung bzw. eine Schließung erfolgt. Außerdem solle es möglich sein Gruppen zu definieren, die von der Schließung nicht betroffen sind.
1) Neues Plugin erstellen
In der Foren-Administration unter Plugins->Plugin Entwicklung können neue Plugins erstellt werden.
Plugin ID & Plugin Name Die ersten beiden Werte, die bei der Erstellung eines Plugins angegeben werden müssen sind die Plugin ID und der Plugin Name. Die ID ist der interne Name des Plugins. Er darf keine Sonderzeichen enthalten. Der Pugin Name ist der Name des Plugins, den später der Endbenutzer zu sehen bekommt.
Plugin ID: threadautoclose Plugin Name: Close Old Threads
2) Elemente des Plugins definieren
Ein Plugin besteht aus folgenden Elementen:
Content-Element Template-Elemente, Javascript oder HTML-Dateien
Config-Variablen Einstellungen für das Plugin
Daten-Variablen In diesen Variablen werden Werte und Daten gespeichert, die das Plugin benötigt. Datenvariablen werden immer einer Quelle (Origin) zugeordnet. Wird eine Variable z.B. dem Benutzerprofil zugeordnet, stehen die gespeicherten Werte später immer zur Verfügung, wenn ein Benutzerprofil geöffnet ist.
Globale Variablen Funktionieren genau wie Daten-Variablen, allerdings stehen die hier gespeicherten Werte später auf allen Seiten des Forums zur Verfügung. Dies kann die Performanz negativ beeinflusssen und sollte daher vorsichtig eingesetzt werden.
Für das Close Old Threads Plugin benötigen wir keine Variablen, die Daten speichern. Allerdings möchten wir dem Administartor einige Einstellungen ermöglichen, daher legen wir drei Config-Variablen an:
Variablen 1) maxdays_messageage_warning Nach X Tagen soll eine Warnung angezeigt werden, dass das Thema schon alt ist. Die Variable ist von Typ int und bekommt den Standardwert 180
2) maxdays_messageage_close Nach X Tagen soll das Thema ganz geschlossen werden. Die Variable ist von Typ int und bekommt den Standardwert 360
3) plugin_exceptions Hier können Gruppen angegeben werden, welche auch nach dem erreichen von maxdays_messageage_close noch antworten können. Die Variable ist vom Typ grouprights und bekommt den Standardwert administrator
Templates Das Plugin soll später an zunächst 2 Stellen im Forum aktiv werden: Einmal beim Schreiben eines Beitrags, und einmal in der Themenansicht.
Wir benötigen daher 2 neue Template-Elemente:
Plugin Template Element "New Message"
Wir ordnen unser neues Element dem Foren-Template "Neuen Beitrag Schreiben" zu und erreichen damit, dass der Code des Templates immer ausgeführt wird, wenn das Template "Neuen Beitrag Schreiben" aufgerufen wird.
Desweiteren können wir festlegen, wann genau das Plugin Template ausgeführt werden soll:
Header -> das Plugin-Template wird direkt VOR dem Foren-Template ausgeführt. Footer -> das Plugin-Template wird direkt NACH dem Foren-Template ausgeführt. Inline-Element -> Die ermöglich die Ausführung der Plugin-Codes innerhalbt des Foren-Templates. Hierzu gibt es in den Foren-Templates Markierungen. Im "Neuen Beitrag Schreiben"-Template gibt es eine solche Markierung z.B. innerhalb des "Beitrag Schreiben" Formulars. Zu den Markierungen in den Template -Elementen wird es in Kürze noch ein eigenes Tutorial geben.
Unsere Einstellungen für das Element "New Message" lauten also: Template: Neuen Beitrag Schreiben Inline-Element: "new_message_in_form" (Name der Markierung im Foren Template) Template Name: new_message
Analog dazu wird auch das Template "topic" angelegt: Template: Themen Ansicht Header: JA - das Plugin-Template soll vor dem Laden der Beiträge angezeigt werden. Template Name: topic
3) Plugin Elemente schreiben
Wir haben nun alle Elemente des Plugins definiert und den jeweiligen Foren-Templates zugeordnet. Im nächsten Schritt schreiben wir nun den Code des Plugins
Plugin-Templates funktionieren fast genau wie normale Foren-Templates. Es stehen alle Foren-Variablen zur Verfügung, die auch im verknüpften Template-Element verwencet werden. Außerdem stehen die Variablen des Plugins zur Verfügung.
Auf den Wert der Variablen maxdays_messageage_warningzum Beispiel kann im Plugin Template mit {{plugin_threadautoclose_config_maxdays_messageage_warning}} zugegriffen werden. Für Rechtevariablen erzeugt das System automatisch eine zusätzliche boolean-Variable. D.h während die Variable {{plugin_threadautoclose_config_plugin_exceptions}} die Gruppen-Ids der Gruppen enthält, die von der Themenschließung nicht betroffen sind, enthält {{plugin_threadautoclose_config_plugin_exceptions_boolean}} einen true/false Wert, der für den aktuellen Benutzer angepasst wird.
Das Element new_message setzt folgendes um:
Beim laden von "Neuen Beitrag Schreiben" prüfen wir ob
1) Das maximale Themenalter erreicht wurde 1a) Falls ja: Prüfen Ob das Mitglied in der "Ausnahmen"-Gruppe ist. 1aa) Falls ja: Warnhinweis anzeigen, dass das Thema eigentlich geschlossen wäre 1ab) Falls nein: Thema als geschlossen anzeigen, Laden des "Beitrag schreiben" Templates unterbinden
2) Das Themenalter für eine Warnung reicht: 2a) Falls ja: Warnung anzeigen
<!--{{reply==true.start}} = Nur laden, wenn geantwortet wird:--> {{reply==true.start}}
<!--Berechnung der Tage seit der letzten Antwort--> {{secs_since_message.startint}}{{server_time}}-{{thread_lastmessage_ts}}{{secs_since_message.end}} {{days_inactive.startint}}{{secs_since_message}}/60/60/24{{days_inactive.end}}
{{limitreached.start}}0{{limitreached.end}}
<!--Thread ist älter als in maxdays_messageage_close definiert--> {{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.start}}
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.start}} <!--Thread ist älter als in maxdays_messageage_close definiert - aber der USer ist in einer ausgenommenen Gruppe--> {{limitreached.start}}1{{limitreached.end}} <div class="threadinactive">In diesem Thema wurden seit mehr als {{plugin_threadautoclose_config_maxdays_messageage_close}} Tagen kein Beitrag verfasst. <br/>Bitte überlegen Sie vor dem posten ob es nicht sinnvoller ist, ein neues Thema zu eröffnen</div>
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.else}} <!--Thread ist älter als in maxdays_messageage_close definiert - Thema wird als geschlossen angezeigt--> <div class="threadinactive_hardlimit" style="text-align:center;"> Dieses Thema wurde aufgrund von Inaktivität geschlossen. <br/>Bitte eröffnen Sie bei Bedarf ein neues Thema.<br/> <a href="{{reply_message_link}}" class="button button1">zurück zum Beitrag</a> </div>
<!--Diese Funktionen veerhindern, dass weitere Templates geladen werden--> {{template_stoploading(new_message)}} {{template_stoploading(quote_html)}}
<!--Thread ist älter als in maxdays_messageage_warning definiert - Warnhinweis anzeigen--> {{days_inactive>plugin_threadautoclose_config_maxdays_messageage_warning.start}}{{days_inactive<plugin_threadautoclose_config_maxdays_messageage_close.start}} {{limitreached.start}}1{{limitreached.end}} <div class="threadinactive">Bitte beachten Sie, dass in diesem Thema schon länger kein Beitrag mehr verfasst wurde.<br/>Überlegen Sie vor dem posten ob es nicht sinnvoller ist, ein neues Thema zu eröffnen.</div> {{days_inactive<plugin_threadautoclose_config_maxdays_messageage_close.end}}{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_warning.end}}
<!--Hier wird der eingefügte Code per Javascript auf der Seite positioniert. Je nach Template wird er an eine unterschiedliche Position geschoben--> {{limitreached==true.start}}
Das Element "topic" wird auf der Themen Ansicht geladen. Für die erste Version des Plugins beschränken wir uns darauf, die Schnellantwort auszublenden, wenn das Limit überschritten wurde (da Mitglieder ja sonst auf diesem Wege dennoch Beiträge schreiben könnten).
Wenn alles klappt, sollten nun beim beantworten alter Themen keine Antwort mehr möglich sein.
5) Veröffentlichen
An dieser Stelle ist die erste Version des Plugins fertig für die Veröffentlichung im Plugin-Store. Dazu geben wir in den Plugin-Einstellungen die gewünschte Versionsnummer an (Falls bereits eine Version des Plugins veröffentlicht wurde muss die versionsnummer höher sein als zuvor!) und klicken auf "In Plugin Store veröffentlichen. Da wir bei den Plugin-Einstellungen festgelegt haben, dass das Plugin sichtbar für alle ist (Public Store) erscheint das Plugin nun im öffentlichen Plugin Store, sobald ein Xobor Mitarbeiter den Code überprüft und für gut befunden hat.
Ist das Plugin erst einmal im Plugin Store, kann es von allen Xobor Foren mit einem Klick installiert und verwendet werden.
6) Erweitern
Die Arbeit hört hier natürlich nicht auf. Man könnte noch Variablen hinzufügen, die dem Admin erlauben, selbst die angezeigten Texte festzulegen. Oder man fügt bei der Themen-Ansicht gleich das "Thema geschlossen"-Icon ein wenn das Antworten nicht gestattet ist.
Nachdem ein Plugin verändert wurde, muss eine neue Versionsnummer angegeben werden, bevor es im Plugin Store veröffentlicht werden kann. Ist eine neue Version verfügbar, können alle Foren das Update mit einem Klick installieren.
In meinem Forum wird die Shoutbox als gemütlicher Chat für zwischendurch gerne genutzt.Ewig schade, dass man dort gepostete Links (z.B. von YT) nicht direkt anklicken, sondern umständlich kopieren und in der Browserzeile pasten muss.Könnte man nicht zumindest dafür sorgen, dass die Links anklickbar ...
Hallo Franz-Jupp,Ich habe einen dritten Textfall mit Zeilenumbruch nach jedem Bild-Einfügen und einmaligen Speichernam Schluss probiert, es hat leider nicht funktioniert.http://www.maetrix.net/t12919f2408-Fehle...n.html#msg98456Nur das Bild mit unverändertem Dateinamen wird im Beitrag korrekt eingef...
Nach Installation der App (auf iPad) muss man die E-Mail-Adresse bestätigen, damit man Push-Nachrichten bekommt.Nach Klick auf den Link kommt aber diese Ansicht:[[File:image.png|none|auto]]Das stimmt aber (hoffentlich) nicht? Man möchte ja Push auf das Gerät, wo man die App installiert hat und keine...
Gibt es eine Möglichkeit das Formular des E-Mail Newsletter anzupassen. Es geht um den unteren Teil der automatisch eingefügt wird. Den würde ich gerne erweitern um den Benutzernamen. Es gibt immer wieder Mitglieder die sich nicht mehr einloggen können weil sie ihren Benutzernamen nicht mehr wissen....
Zwischenspeicherung ist nicht nötig.Einfügen, Zeilenumbruch, einfügen, Zeilenumbruch, usw.Erst zum Schluss den Beitrag speichern.Jedenfalls hat das vor 'ner knappen Stunde in meinem Testforum so funktioniert.Sieht vor'm speichern ungefähr so aus[[File:Screenshot_20240517-160950_Chrome.jpg|none|auto]]
Dateinamen von Bildern, Grafiken etc. mit Umlauten (Ä, Ö, Ü und ä, ü, ö sowie dem Buchstaben ß)führen zu merkwürdigen Anzeige-Ausfällen.Bei unseren historischen Bahnen kommen öfter Bilddateinamen wie Märklin-4711, Märklin-4712,Märklin-4713 etc. vor. Dies führt dazu, dass meist das erste Bild noch an...
Zitat von Mike48 im Beitrag #91Ich habe im Forum das Update gestartet. Dann auf meinem iPhone die App neu installiert.Also ich musste unter Android nichts neu installieren. Eventuell hilft es, wenn du einmal in deiner App die Push-Nachrichten deaktivierst und dann wieder aktivierst.Zitat von Ludger ...
Zitat von Mike48 im Beitrag #87Muss man nach dem Update die App neu installieren?Das sollte sich automatisch aktualisieren. Wenn ich das richtig sehe gibt es aber je nach Betriebssystem und Version Unterschiede, wie schnell das passiert.
Zitat von Gabriella im Beitrag #7Ja ebenso, musst Du denn dafür noch etwas anderes schreiben?Nein. Das habe ich schon so eingebaut dass der AF auch mobil wie beim PC gleich ist.
Hallo zusammen,wie es scheint, hat niemand eine Idee zu meinem Wunsch. Ich habe gerade nachgeschaut, scheint nicht möglich zu sein, den AF auch für Mitglieder nicht sichtbar zu machen. Oder ich finde nicht, wo das machbar wäre. Dann sehe ich das wohl richtig, dass nur eine Deaktivierung in Frage käme?
Zitat von creator im Beitrag #83Andere Android-Smartphones nutzen entweder die integrierten Knöpfe im Gerät, eine ähnliche Leiste unten oder Wischgesten. Beim iPhone gibt es genauso Gesten.Dann wäre es ja eine gute Geste zu zeigen wie das auf einem iPhone geht statt zu spekulieren.Zitat von creator ...
Zitat von l2otbart_57 im Beitrag #81Möglicherweise wird die Leiste nur auf "Verlangen" eingeblendet, indem man den unteren Bildschirmrand berührt und nach oben ziehtGeht nicht. Damit öffnet man die Liste der geöffneten Apps.
Zitat von AlEm im Beitrag #1Da steht nun 3 Mitglieder warten auf ihre Freischaltung. Jetzt Speichern - wenn ich auf Jetzt Speichern gehe, gelange ich zum Adminstrationsmenü.Wenn du im Admin auf der Home-Seite bist, dann musst du, so weit ich weiß, ganz nach unten scrollen. Da solltest du die Liste f...
Hallo River, danke, diese Funktion kannte ich tatsächlich noch nicht.Gut zu wissen, mit der Revision-Funktion können wir die alten Texte finden und wieder herstellen.Allein dafür lohnt sich dieses Thema
Ich habe die kostenlose Version. Ich hatte an sich eingestellt, dass ich neue Mitglieder manuell freischalten muss. Und hab dann Einladungen versendet.Mir werden nun 3 neue User angezeigt (eine bin ich mit einem zweiten Browser)Da steht nun 3 Mitglieder warten auf ihre Freischaltung. Jetzt Speichern...
Zitat von Mike48 im Beitrag #77Auf Android bekomme ich nicht mein Logo auf den Home-Bildschirm sonder nur einen Button mit dem ersten Buchstaben des Forum. Android 8.1.0Das hat sich erledigt nachdem ich auf dem alten Motorola Handy Updates der APPs gemacht habe. Wahrscheinlich nach dem Chrome auf de...
Forum empfehlen