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
{{boxorderval.startint}}1 +1{{boxorderval.end}}
Letzte Aktionen im Forum
forum_message forum_message
Gabriella und Anschi65 haben 2 neue Beiträge im Thema warum kommt auf der Seite gefährlich ?? geschrieben.
Hallo Anschi,auf die Frage kann ich Dir antworten, die Smilies solltet Ihr Euch direkt in Euer Forum laden und nicht von der Seite: Smilies4.-user.de, dann passiert Euch das nämlich nicht, dass Ihr bei den Smilies in der Iconbar dort nur noch Platzhalter seht. Denn dann sind sie fest auf unserem Xo...
forum_message forum_message
old-smokey, Ingmar und River haben 4 neue Beiträge im Thema Frage zum Betreff eines Themas geschrieben.
Hallo Ingmar,danke für die Idee- muss ich aber erst mal mit den anderen Mitgliedern unseres Admin-/Moderatorenteam abstimmen.Auch zum Template muss ich erst rückfragen, die beide Forengründer haben ein Template etwas angepasstDie Foren-Nummer ist 778993- falls das hilft.Gruß old-smokey
rating rating
%usernames% hat sich bedankt!
rating rating
Scannerxy hat sich bedankt!
Beitrag: Frage zum Betreff eines Themas
%usernames% hat sich bedankt!
forum_topic forum_topic
Ich bin noch recht neu als Admin in einem größeren Forum tätig, daher weiß ich nicht, ob das hier schon irgendwo mal besprochen wurde.Folgendes Verhalten- ein neues Thema erhält einen Betreff. Dieser wird automatisch mit jeder weiteren Antwort übernommen, kann aber jederzeit durch einen User mit sei...
forum_message forum_message
Zitat von Mike48 im Beitrag #3Früher gab es mal ein e Einstellung um das mobile Design zu aktibvieren.Die ist mittlerweile scheinbar verschwunden.Edit:Die gibt es noch:Admin -&gt; Einstellungen -&gt; Mobil -&gt; Einstellungen für das mobile TemplateSie verwenden das mobile Template für Ihr Forum. [b...
forum_message forum_message
Früher gab es mal ein e Einstellung um das mobile Design zu aktibvieren.Die ist mittlerweile scheinbar verschwunden.Edit:Die gibt es noch:Admin → Einstellungen → Mobil → Einstellungen für das mobile TemplateSie verwenden das mobile Template für Ihr Forum. [b]Mobiles Template deaktivie[ren/b]
forum_topic forum_topic
Hallo zusammen,ich habe ein Forum erstellt und habe es auf "privat" bzw auf "nicht öffentlich einsehbar" gestellt. Soweit so gut. Trotzdem ist es möglich über die mobilen Browser sowohl IOS als auch Android für nicht angemeldete Personen möglich den Reiter "letzte Aktionen" einzusehen und sich darü...
rating rating
%usernames% haben sich bedankt!
rating rating
%usernames% hat sich bedankt!
forum_message forum_message
Hallo zusammen,wollte mich nochmal zu diesem Thema melden!Es zeigt sich, dass es hier nicht nur eine Richtung geben kann!Will ich schnell informieren oder sollen die Bilder auf mich wirken und einen Eindruck hinterlassen?Welche Art der Vergrößerung am besten ist, hängt auch von den Beiträgen ab!Manc...
forum_message forum_message
Ingmar hat einen neuen Beitrag im Thema warum kommt auf der Seite gefährlich ?? geschrieben.
Zitat von Marlies Stockmann im Beitrag #1Was muss Ich tunUns ein paar mehr Details verraten Beim Besuch welcher Seite gibt es welche Fehlermeldung? gerne auch mit Bild...
rating rating
Scannerxy hat sich bedankt!
Beitrag: Profilbilder bei Xobor unscharf
%usernames% hat sich bedankt!
forum_topic forum_topic
seit Heute hab ich das Problem es geht ein Fenster auf gefährliche Seite kann da ein Virus drin sein ??Was muss Ich tun
forum_message forum_message
erika50 hat einen neuen Beitrag im Thema Euer Forum vorstellen. geschrieben.
Möchte meine Plauder-Welt heute endlich VorstellenUnd damit keiner Denk warum ich mein Bollywood Forum wieder gelöscht habe. Möchte Ich darauf hinweisen dass man in einen Bollywood Nun nicht alles reinmachen kann. Nun habe Ich wieder ein Plauder-Forum in den man nun über alles Plaudern kann von Seri...
forum_message forum_message
Ingmar hat einen neuen Beitrag im Thema Profilbilder bei Xobor unscharf geschrieben.
Also meine Profilbilder sind scharf zu erkennen. Ohne einen Link zu einem Beispiel kann ich daher leider nicht weiterhelfen.
forum_message forum_message
Roger34385 hat einen neuen Beitrag im Thema Löwe u. Fehlermeldung geschrieben.
4.8.20, 21:03 Uhr[[File:loewe.JPG|none|fullsize]]
forum_topic forum_topic
Catrxlf hat das Thema Profilbilder bei Xobor unscharf erstellt
Hallo :)Ich hab dazu kein Thema gefunden, deshalb erstelle ich ein neues.Ich hab das Problem, dass alle Profilbilder, die ich bei Xobor hochlade, unscharf sind. Selbst, wenn ich sie per Photoshop scharf stelle, werden sie trotzdem unscharf angezeigt. Kann mir da irgendwer helfen? Langsam verzweifle ...
rating rating
Ingmar hat sich bedankt!
Beitrag: Erweiterung der appicons im xoborfont
%usernames% hat sich bedankt!
rating rating
Ingmar hat sich bedankt!
Beitrag: Position der Werbung desktop/mobil
%usernames% hat sich bedankt!
rating rating
Ingmar und River haben sich bedankt!
Beitrag: Position der Werbung desktop/mobil
%usernames% haben sich bedankt!
forum_message forum_message
River hat einen neuen Beitrag im Thema Position der Werbung desktop/mobil geschrieben.
Finde ich auch bzw. habe ich das auch schon gedacht und deshalb im Testforum bereits auf Werbung oberhalb umgestellt, wobei die seitliche Werbung eh das Forum seltsam verschoben hatte (Header), aber das ist ein anderes Problem.Getrennte Einstellung kleine Displays (Smartphones) und große Displays (D...
rating rating
%usernames% hat sich bedankt!
rating rating
Mike48 hat sich bedankt!
Beitrag: Im Aktivity Feed fehlt Bild hochgeladen
%usernames% hat sich bedankt!
forum_message forum_message
Ingmar hat einen neuen Beitrag im Thema Im Aktivity Feed fehlt Bild hochgeladen geschrieben.
Zitat von Mike48 im Beitrag #8Die werden erst ab 1190px Bildschirm angezeigt. So ein großes Handy habe ich nicht.Ah, ja das war natürlich nicht so geplant. Mit dem nächsten Update werden die Einträge für Bilder und Alben genau wie in den anderen Templates direkt im Feed eingeordnet.
forum_message forum_message
Danke, ist ~intern behoben~ Änderungen werden immer erst mit dem nächsten Update übernommen. Der Zeitpunkt und Umfang des Updates werden unter Aktuelle News bekanntgegeben
forum_message forum_message
Hallo Sami ,ich habe eine E-Mail geschickt wie von Dir angeraten . Ich hoffe das ich es danach hinbekomme . Vielen lieben Dank
forum_topic forum_topic
Hallo ,vorab sicherheitshalber mal * meine Kenntnis von solchen Dingen liegt bei - 0 .Ich versuche es mal : Ich habe eine Internetseite eingerichtet bei Xobor . Nun möchte ich gerne mit der Seite auf 1&1 Umziehen . Leider bin ich damit total Überfordert .Laut Rücksprache mit 1&1 muss ich NS-Record...
forum_message forum_message
Okay, danke für diese Info.
rating rating
%usernames% hat sich bedankt!
rsummary rsummary
Gabriella und Scannerxy haben 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Gabriella und Scannerxy haben 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Ingmar und River haben 3 Beiträge bewertet (Details)
%usernames% haben sich bedankt!
rsummary rsummary
Mike48 hat 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
Wer ist Online?
1 Mitglied und 7 Gäste sind Online
cr
Besucher Statistiken
8 Aktive User
1 Mitglied und 7 Gäste sind Online:
creator


Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)

Besucherzähler
Heute waren 418 Gäste und 27 Mitglieder, gestern 552 Gäste und 29 Mitglieder online.

Statistiken
Themen 38511
Beiträge 278804
Mitglieder 11.639
Forum empfehlen