Praxisbeispiel: Plugin "Close Old Threads"

Plugin-Entwicklung



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

Das könnte dann z.B. so aussehen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
<!--{{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)}}
 
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.end}}
 
{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.end}}
 
<!--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}}
 
<script>
$(document).ready(function(){
{{template==1.start}}var $infotexttarget = $('#previewbutton').closest('table');{{template==1.end}}
{{template==111.start}}var $infotexttarget = $('#previewbutton').closest('table');{{template==111.end}}
{{template==110.start}}var $infotexttarget = $(".submit-buttons");{{template==110.end}}
{{template==144.start}}var $infotexttarget = $("#newmsg");{{template==144.end}}
$('.threadinactive').insertBefore($infotexttarget);
});</script>
{{limitreached==true.end}}
{{reply==true.end}}
 



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


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

{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.start}}
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.start}}
{{limitreached.start}}1{{limitreached.end}}
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.else}}
{{reply_quick.start}}0{{reply_quick.end}}
{{plugin_threadautoclose_config_plugin_exceptions_boolean==true.end}}

{{days_inactive>plugin_threadautoclose_config_maxdays_messageage_close.end}}




4) Testen



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.


Login
Activity Feed
forum_message forum_message
spotter46 und Gemshorn haben 2 neue Beiträge im Thema Posteingang leeren geschrieben.
Zitat von Gemshorn im Beitrag #3Edit: In meinem Forum (V6) gibt es diese Möglichkeit anscheinend nicht.Müsste in V6 eigentlich so gehen wie in V3 in der Mobilansicht [[File:Screenshot_20250222-090551_Chrome.jpg|none|auto]][[File:Screenshot_20250222-090631_Chrome.jpg|none|auto]]Edit:Damit nicht zu vi...
forum_message forum_message
BeNew und quiclic haben 2 neue Beiträge im Thema Hat sich seit heute irgendetwas zum Thema Werbeanzeigen verändert? geschrieben.
Zitat von spotter46 im Beitrag #11Zitat von BeNew im Beitrag #9So geht es auf jeden Fall nicht, für die Hiandyleute ist das ein verständlicher Grund unser Forum nicht mehr zu benutzen.Meine Beobachtung/Meinung ist jetzt betimmt nicht repräsentativ, mag auch sein, dass ich mich irre, aber vielleicht ...
rating rating
Gemshorn hat sich bedankt!
Beitrag: Posteingang leeren
%usernames% hat sich bedankt!
forum_message forum_message
spotter46, Ingmar und Johannes haben 4 neue Beiträge im Thema "Geheime" Kommentare werden den Admins trotz fehlender Rechte angezeigt geschrieben.
Ich habe ja schon geschrieben in #3, dass ich nicht ganz zu Ende gedacht hatte.Was ich technisch aber immer noch nicht nachvollziehen kann, dass die Kommentare für die "ausgeschlossenen" Admins beim öffnen eines Bildes nicht angezeigt werden, aber in der Liste der letzten Kommentare doch.
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Johannes und spotter46 haben 2 neue Beiträge im Thema Frage zu den Preisen geschrieben.
In der Administration wird immer der korrekte Preis angezeigt. Auf unserer Homepage verweisen wir auf die Staffelpreise in der Fußnote.Wir können für kleine Foren nicht die gleichen Preise machen wie für Foren mit Tausend Mitgliedern. Das wäre für beide Seiten nicht fair.
forum_topic forum_topic
CuSF hat das Thema Frage zu den Preisen erstellt
Hallo,ich habe mal eine Verständnisfrage.Auf der xobor Seite wird der Basistarif mit 6,95€ angegeben und der Profitarif mit -ab- 13,90€.Wir nutzen derzeit den Basis Tarif für 6,95€. Ich habe jetzt mit dem Gedanken gespielt upzugraden. In meiner Administration wird für den Profitarif aber 28,90€ verl...
forum_topic forum_topic
Manchmal kann es nötig sein, dass nur eine bestimmte Zahl von Admins die Bildkommentare sehen können, zum Beispiel bei Wettbewerben.Dafür gibt's bei uns zwei Gruppen für Admins.Die Rechte im Wettbewerbsalbum sind so gesetzt, dass ein Teil der Admins die Kommentare nicht lesen kann.Wenn ein entsprech...
forum_message forum_message
spotter46 hat einen neuen Beitrag im Thema Posteingang leeren geschrieben.
Zitat von Gemshorn im Beitrag #1Es haben sich inzwischen 200 Seiten an PN bei mir angesammelt. kann man das alles irgendwie in Bausch und Bogen löschen?Kann man.Am Ende der Listen Posteingang bzw. Postausgang Klick auf Alle auswählen und dann neben der Anzeige "Abgehakte löschen" auf los.[[File:Sc...
rating rating
spotter46 hat sich bedankt!
Beitrag: Posteingang leeren
%usernames% hat sich bedankt!
forum_topic forum_topic
Gemshorn hat das Thema Posteingang leeren erstellt
Es haben sich inzwischen 200 Seiten an PN bei mir angesammelt. kann man das alles irgendwie in Bausch und Bogen löschen?
forum_message forum_message
old-smokey und Ingmar haben 2 neue Beiträge im Thema nächste Seite bei neuen Beiträgen geschrieben.
Zitat von Ingmar im Beitrag #2Hast du schon probiert ob der "Zähler neu berechnen" Knopf unter Admin-Einstellungen Abhilfe schafft?Hatte ich nicht und aktuell passt es auch von selbst wieder. Wenn weitere neue Beiträge (manchmal erst nach 5-6) hinzukommen, stimmt die Seitenanzeige von selbst wieder....
forum_message forum_message
Ingmar, spotter46 und CuSF haben 3 neue Beiträge im Thema Hat sich seit heute irgendetwas zum Thema Werbeanzeigen verändert? geschrieben.
Zitat von CuSF im Beitrag #10Wir nutzen auch den Basistarif und bei uns wurde bisher zu 100% nur Eigenwerbung eingeblendet. Dies an 2 Stellen oben und unten im Forum. Der eigentliche Hinweis ist, dass diese Werbung aber -immer- vorhanden ist, egal wie oft die Seite aufgerufen wirdWenn ihr die Varian...
rating rating
Ingmar und spotter46 haben sich bedankt!
Beitrag: V4 Bild anhängen - "äöü" im filename
%usernames% haben sich bedankt!
forum_message forum_message
Ingmar und l2otbart_57 haben 4 neue Beiträge im Thema Einlogversuchenschlagen Fehl geschrieben.
Wenn ich das richtig sehe hat das Input-Feld nicht die korrekte ID, wenn das Xobor Captcha aktiv ist.Bei mir hat das aber keine Auswirkungen auf den Login - lediglich die Onsubmit-Prüfung, ob das Captcha ausgefüllt ist funktioniert so nicht.
forum_message forum_message
l2otbart_57 hat einen neuen Beitrag im Thema V4 Bild anhängen - "äöü" im filename geschrieben.
Zitat von l2otbart_57 im Beitrag #1denke, so müsste es sich reproduzieren lassen: ich wähle 2 Dateien aus und lade sie hochdann füge ich sie einDenke, wenn man 4 statt 2 Dateien mit Umlauten hochlädt und in den Beitrag einfügt, wird der Effekt deutlicher. [ [File:ic_file1_äöü_ß_ÄÖÜ.png|none|fullsiz...
forum_topic forum_topic
Benjaminbe hat das Thema Einlogversuchenschlagen Fehl erstellt
Hallo,ich kann mich gerade im Forum nicht einloggen. Ich trage Usernamen und Passwort ein sowie die Anti Spam Abfrage, doch bei Drücken des Anmeldebuttons passiert gar nicht - auch keine Fehlermeldung. Von daher kann ich auch auf ein Bildschirmfoto verzichten. Das Ganze funktioniert mit zwei von mei...
forum_message forum_message
BeNew, Ingmar und Johannes haben 7 neue Beiträge im Thema Hat sich seit heute irgendetwas zum Thema Werbeanzeigen verändert? geschrieben.
Ok, danke Ingmar, für die bezugnehmende und ausführliche Antwort.Ich muss mich dann mal besprechen, was wir machen werden. So geht es auf jeden Fall nicht, für die Handyleute ist das ein verständlicher Grund unser Forum nicht mehr zu benutzen.
forum_message forum_message
Ingmar und Schattenherz haben 3 neue Beiträge im Thema Forum zerschossen 2.0 geschrieben.
Der Fehler wurde mittlerweile behoben. Es ist jetzt wieder das aktuelle Gaia Template mit der "Winter"-Vorlage aktiv. Ihr es gerne wieder nach Bedarf anpassen.
rating rating
Hanshard hat sich bedankt!
Beitrag: GästeZähler defekt ?
%usernames% hat sich bedankt!
forum_topic forum_topic
old-smokey hat das Thema nächste Seite bei neuen Beiträgen erstellt
@Ingmar Vermutlich gab es dazu schon mal ein Thema ich fand aber nichts.Sporadisch werden neue Beiträge zwar unter Neueste Ereignisse gelistet und man kann diese durch Anwahl auch aufrufen. Hat man dieses Forum aber mit altem Stand noch als Tab offen und aktuallisiert es, wird die neue Seite mit den...
forum_topic forum_topic
l2otbart_57 hat das Thema V4 Bild anhängen - "äöü" im filename erstellt
V4 Bild anhängen - "äöü" im filenameim V4 versuche ich mich gerade an einem Script, um die hochgeladenen Dateien alle mit einem Click in den Beitrag einzufügen (ähnlich wie im V6)Jetzt gibt es ein Problem mit Umlauten im Dateinamen.denke, so müsste es sich reproduzieren lassen: ich wähle 2 Dateien ...
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Johannes hat einen neuen Beitrag im Thema Hat sich seit heute irgendetwas zum Thema Werbeanzeigen verändert? geschrieben.
Wenn Sie ein werbefreies Forum wünschen, finden Sie unter Admin - Premium den Profi Tarif. Damit haben sie nicht nur ein werbefreies Forum, sondern unterstützen uns auch. Denn die Werbung in den werbefinanzierten Foren deckt bei weitem nicht die Kosten.Wir passen regelmäßig die Art und Häufigkeit de...
forum_topic forum_topic
Mein Frage steht eigentlich schon im Thementext.Meine Handy-User beklagen, dass die Werbung seit heute extrem groß angezeigt wird. Woran kann das liegen?
Wer ist Online?
2 Mitglieder und 130 Gäste sind Online
Besucher Statistiken
132 Aktive User
2 Mitglieder und 130 Gäste sind Online:
spotter46, nobody


Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)

Besucherzähler
Heute waren 1753 Gäste und 12 Mitglieder, gestern 2481 Gäste und 24 Mitglieder online.

Statistiken
Themen 41808
Beiträge 306110
Mitglieder 12.503
Forum empfehlen