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
Ambrosius hat einen neuen Beitrag im Thema Herunterladen von Bildern... Namen werden nicht übernommen. geschrieben.
Danke für die schnelle, jedoch nicht zufrieden stellende Antwort.Bei anderen Foren ist dies durchaus möglich, jahrelang so praktiziert, jetzt ist das Form (nicht xobor) jedoch leider offline.Sollte man vielleicht mal in Angriff nehmen - technisch möglich ist das ja.Danke, bis denneAmbrosius
forum_message forum_message
Wolfgang, Mike48 und l2otbart_57 haben 4 neue Beiträge im Thema In "Beitrag bearbeiten" steht etwas anderes als im angezeigten Beitrag selbst! geschrieben.
@Mike48 @l2otbart_57 Wow, erstmal besten Dank für die schnellen Antworten!************************Habe einiges versuchtHabe schon einiges versucht und Eure Vorschläge ausprobiert...Alle Plugins gesperrt, Zitat-Funktion ausprobiert (holt auch nur den alten Beitrag) und die Revision der Beiträge durch...
rating rating
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
rating rating
%usernames% hat sich bedankt!
forum_topic forum_topic
Ist das überhaupt möglich, dass ein Beitrag, der vor 2 Stunden bearbeitet wurde und sich auch abspeichern ließ, jetzt unter "Beitrag bearbeiten" (V4) immer den alten Beitrag anzeigt?Der Beitrag ist ziemlich groß geworden, macht eine Menge Arbeit ihn neu zu schreiben....Hier der Link: "Letzte Beiträg...
forum_message forum_message
stu hat einen neuen Beitrag im Thema Plugin : Kniffel geschrieben.
Eine Rückmeldung, alles läuft prima!Mit der einstellbaren Menge an Spiele kann man nun die Dauerspieler etwas zügeln, damit andere überhaupt auch mal wieder in der Liste erscheinen.Super Sache und danke nochmals dafür.Grüßestu
forum_message forum_message
Gemshorn hat einen neuen Beitrag im Thema Galerie für User-Avatare? geschrieben.
Eine Konkretion:An sich würde das Galerie-Feature reichen, aber dort werden die kleine Bilder immer auf eine bestimmte Größe skaliert?Wenn man das unterbinden und die Avatarbilder mit 160 x 160 anzeigen könnte, wäre das schon eine große Hilfe...
forum_topic forum_topic
Gemshorn hat das Thema Galerie für User-Avatare? erstellt
Im Administrationsbereich können unter Benutzer | Profil Optionen | Profilbilder / Avatare Weblinks zu Benutzerbildern angegeben werden.Das ist besser als nichts.Jedoch wird die Auswahl im eigenen Profilmenü rasch unübersichtlich, wenn dort viele Avatare die Seite füllen.Kann man das irgendwie verei...
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
spotter46 und Ambrosius haben 2 neue Beiträge im Thema Herunterladen von Bildern... Namen werden nicht übernommen. geschrieben.
Zitat von Ambrosius im Beitrag #3wird dieses Problem denn irgendwann mal gelöst (es besteht ja offenbar schon lange Zeit) ?Das "Problem" ist systembedingt.Alle Bilder werden auf einen Server hochgeladen und bekommen dann einen neuen Namen.Kein spezielles Vorgehen von Miranus-Xobor, bei anderen Host...
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Helena Hart und Ingmar haben 3 neue Beiträge im Thema Basis Tarif ist blockiert - eingeschränkte Funktionen für Administratioren geschrieben.
wir hatten Anfang des Jahres auf Lastschrifteinzug umgestellt. Da ist wohl irgendwas schief gelaufen. Mahnungen habe ich leider nicht mit bekommen. Wach wurde ich erst, als kaum noch was ging. Das es damit zusammenhing konnte ich mir ja schon denken. Nun geht wieder alles . Vielen Dank! Wir haben wi...
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Olaf und Papierfresserchen haben 2 neue Beiträge im Thema Plugin "Vorschaubilder in der Foren Übersicht" geschrieben.
Zitat von Papierfresserchen im Beitrag #136Was mir noch aufgefallen ist: bei der Erstellung eines Themas kann ich das jpeg nicht verlinken, wird nicht gespeichertBeim Erstellen eines neuen Themas konnte ich das bei mir nicht reproduzieren.Um welches Bild handelt sich das bei Dir denn? So könnte ich ...
rating rating
Papierfresserchen und Pinoki haben sich bedankt!
Beitrag: Plugin "Vorschaubilder in der Foren Übersicht"
%usernames% haben sich bedankt!
forum_topic forum_topic
Seit vergangenen Samstag gibt es erhebliche Einschränkungen für Administratoren in unserem Forum.Auf der Home Seite erscheint dauerhaft die Information, das die Domain bezahlt werden muss.( im Basis Tarif den wir schon Jahre nutzen ist sie jedoch inbegriffen )Weiterhin wird angezeigt das das Forum a...
forum_message forum_message
spotter46 hat einen neuen Beitrag im Thema Allgemeine Frage zum Zählablauf der Mitglieder und dem zurücksetzen geschrieben.
Nein, es wird alles einfach nur neu berechnet, ohne dass der Admin darauf Einfluss nehmen kann.Was Du allerdings mit "Nummer 1" etc. meinst, ist mir ein Rätsel.Und bitte, nutze für Bilder hier die Funktion Datei anhängen.Denn beim Klick auf dein Bild bekam ich zusätzlich noch Sch...-Werbung
forum_message forum_message
Babs02, spotter46 und Mike48 haben 3 neue Beiträge im Thema Allgemeine Frage zum Zählablauf der Mitglieder und dem zurücksetzen geschrieben.
Nein das war nicht gemeint :) kommt davon wenn ich mich kurz halten will^^Es geht um diese Funktion Ob man wenn man da auf neu berechnen geht noch auswählen kann was genau oder ob sofot alles zurückgesetzt wird.Des weiteren ob beim Zurücksetzen nach Anmeldedatum die Nummern vergeben werden oder ob ...
rating rating
Gabriella und spotter46 haben sich bedankt!
Beitrag: Allgemeine Frage zum Zählablauf der Mitglieder und dem zurücksetzen
%usernames% haben sich bedankt!
forum_topic forum_topic
Kann man sich denn den Mitglieder/Beitragszähler erst ansehen oder wird sofort alles zurückgesetzt? Und wie wird die Berechnung angeordnet? Nach Datum und Uhrzeit? Also: User 1 angemeldet am 1.4 /dann User 2 angenmeldet am 5.5/ User 3 angemeldet am 7.5 usw? Oder kann man das auch selbst anordnenViel...
forum_message forum_message
Babs02 und spotter46 haben 3 neue Beiträge im Thema Mitgliederzahl falsche Angabe? geschrieben.
Okay, danke dir dann werd ich mal was Neues aufmachen :)
forum_message forum_message
XiNáru hat einen neuen Beitrag im Thema Alter Ego: Rollen erstellen Problem geschrieben.
Da ich leider nur begrenzte zeit bearbeiten kann (was echt unschön ist) bin ich gezwungen eine zweite nachricht zu schreiben...Also mein member hat folgendes noch überprüft:er hat eine rolle die ein bild hatte gelöscht und konnte diese danach problemlos wieder anlegen, mit bild.EINE EINZIGE rolle oh...
forum_topic forum_topic
XiNáru hat das Thema Alter Ego: Rollen erstellen Problem erstellt
Hey Guten Tag,Ich habe gerade von einem user eine anfrage bekommen wegen unserem Plugin Alter Ego.Er kann rollen erstellen, aber er kann plötzlich keine bilder einfügen, versucht er das, kann er die rolle nicht speichern. ohne bild geht es zu bearbeiten, nur nicht das bild.habe es selber auch versuc...
forum_message forum_message
Olaf hat einen neuen Beitrag im Thema Plugin "Vorschaubilder in der Foren Übersicht" geschrieben.
Das Update 0.077 ist Online.Danke Ingmar!GrußOlaf
rating rating
spotter46 hat sich bedankt!
Beitrag: Unsere Top 500 Xobor-Foren
%usernames% hat sich bedankt!
forum_message forum_message
Olaf, spotter46 und focus haben 3 neue Beiträge im Thema Unsere Top 500 Xobor-Foren geschrieben.
Auch ich finde die Top 500 überhaupt nicht aussagekräftig.Es gibt Foren auf Platz 400, die sind qualitativ viel besser als Foren an der Spitze von der Top 500.Und es gibt einige "Hilfmittel", mit denen man den Platz in der Liste manipulieren kann...Das treibt natürlich den Trafik unnötig in die Höhe...
rsummary rsummary
Wolfgang hat 3 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
Wer ist Online?
1 Mitglied und 290 Gäste sind Online
Besucher Statistiken
291 Aktive User
1 Mitglied und 290 Gäste sind Online:
Mike48


Besucherrekord
2542 Benutzer gleichzeitig online (25.03.2026 01:44)

Besucherzähler
Heute waren 11144 Gäste und 17 Mitglieder, gestern 21500 Gäste und 31 Mitglieder online.

Statistiken
Themen 42564
Beiträge 313062
Mitglieder 12.710
Forum empfehlen