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_topic forum_topic
Ich setze als bekannt voraus, dass Alben in der Bildergalerie softwaremäßig automatisch ein Cover bekommen, das aus dem ältesten Bild im betreffenden Album generiert wird.Als Option kann aber auch ein eigenes Coverbild hochgeladen werden.Zu letzterer Möglichkeit haben wir uns entschieden, um ein ein...
forum_message forum_message
Ingmar und JanB haben 2 neue Beiträge im Thema Video Upload funktioniert wie genau? geschrieben.
Also von unserer Seite ist keine 30 Sekunden Längenbegrenzung vorgesehen. In meinen Testforen habe ich auch schon längere Videos hochgeladen. Ich bin noch bis Freitag nur über eine mobile Verbindung online und kann das erst am Wochenende genauer anschauen.
rating rating
spotter46 hat sich bedankt!
Beitrag: Video Upload funktioniert wie genau?
%usernames% hat sich bedankt!
forum_message forum_message
River und 3 weitere haben 4 neue Beiträge im Thema Einstellung Position der Werbung fehlt geschrieben.
Zitat von Ingmar im Beitrag #3dass die Werbung an einer anderen Stelle erscheint als vom Admin vorgegeben.Wir haben Foren mit Werbung 'oberhalb' eingestellt. Es kommt auch Werbung oberhalb und auch unterhalb. Es wird keine Werbung seitlich eingeblendet. Vermutlich wird die Werbung schon noch 'oberha...
rating rating
Kipper-Spedition hat sich bedankt!
Beitrag: Plugin "Drei Infoboxen"
%usernames% hat sich bedankt!
forum_topic forum_topic
Mike48 hat das Thema Einstellung Position der Werbung fehlt erstellt
In der neuen Admin kann ich die Einstellungen für die Position der Werbung nicht finden. In der alten Admin ist die in Layout zwischen Kop- & Fuszeile und Navigation. Es ist ärgerlich wenn man nach so langer Zeit immer wieder auf die alte Admin gehen muss.
forum_message forum_message
Olaf und 3 weitere haben 12 neue Beiträge im Thema Plugin "Drei Infoboxen" geschrieben.
Muß ich mal sehen,vielleicht auch die Forumsbreite jedesmal auslesen:1234567 const forumContainer = document.querySelector('.main');function updateForumWidth() {const width = forumContainer.clientWidth;console.log('Aktuelle Forenbreite:', width, 'px');}window.addEventListener('resize', updateForumWi...
rating rating
spotter46 hat sich bedankt!
Beitrag: Plugin "Drei Infoboxen"
%usernames% hat sich bedankt!
forum_message forum_message
mariekulm hat einen neuen Beitrag im Thema Mitglied offline angezeigt, obwohl im Forum angemeldet und aktiv geschrieben.
Hallo zusammen Wir, ich als Admin und Mitglieder in meinem Forum, haben es auf längere Zeit getestet und das Problem besteht nach wie vor. Wenn man sich einloggt, kann man stundenlang lesen und rum klicken wie man will, aber man bleibt als Mitglied online. Und auch wenn man sich einloggt und gar ni...
forum_message forum_message
Kipper-Spedition und 1 weitere haben 2 neue Beiträge im Thema Plugin "Drei Infoboxen" geschrieben.
Hallo Olaf,schick mir mal dein PI an die Boardnummer: 610439. Die Boxen passen sich in der Version: 0.085 nicht an.Lieben Dank
rating rating
Ingmar hat sich bedankt!
Beitrag: Keine Hauptadmin ernennen möglich
%usernames% hat sich bedankt!
rating rating
Ingmar hat sich bedankt!
Beitrag: Registrieren nicht möglich
%usernames% hat sich bedankt!
forum_message forum_message
Olaf und 1 weitere haben 2 neue Beiträge im Thema Plugin "Drei Infoboxen" geschrieben.
Zitat von Kipper-Spedition im Beitrag #204Könntest du das PI so umschreiben, das sich die Boxen im Verhältnis zum Bildschirm immer anpassen?Hallo Arndt,die Boxenbreite wird im Plugin in Prozent angegeben,die Box bleibt also proportional zur Bildschirmbreite.Ich habe keine verschiedene große Monitore...
rating rating
Mike48 hat sich bedankt!
Beitrag: Anklickbares Bild mit unterlegtem Link
%usernames% hat sich bedankt!
forum_message forum_message
spotter46 und 2 weitere haben 11 neue Beiträge im Thema Anklickbares Bild mit unterlegtem Link geschrieben.
Zitat von Mike48 im Beitrag #12Was wäre denn eigentlich die höflichere Variante gewesen?Älter als ich oder jünger als du?Ich bin in dieser Hinsicht ziemlich schmerzlos, Alter ist weder ein Verdienst, auch kein Anrecht auf Besserwisserei und ebenfalls kaum eine Entschuldigung für "Aussetzer".
rating rating
Mike48 hat sich bedankt!
Beitrag: Anklickbares Bild mit unterlegtem Link
%usernames% hat sich bedankt!
rating rating
Mike48 hat sich bedankt!
Beitrag: Anklickbares Bild mit unterlegtem Link
%usernames% hat sich bedankt!
rating rating
spotter46 hat sich bedankt!
Beitrag: Anklickbares Bild mit unterlegtem Link
%usernames% hat sich bedankt!
rating rating
Gabriella hat sich bedankt!
Beitrag: Anklickbares Bild mit unterlegtem Link
%usernames% hat sich bedankt!
forum_message forum_message
Olaf hat einen neuen Beitrag im Thema Anklickbares Bild mit unterlegtem Link geschrieben.
Ich habe mal was zusammengebastelt.Eingabe in der Iconbar in einen neuen HTML Baustein,ich habe ihn den Namen "Bild mit Link" gegeben und den folgenden Codedann in das Fenster setzen und speichern.In der Iconbar ist ein Kettenglied als Icon dann zu sehen.1234567891011121314151617181920212223242526 <...
forum_topic forum_topic
spotter46 hat das Thema Anklickbares Bild mit unterlegtem Link erstellt
Dass es möglich ist und wie es gemacht wird, statt einem "reinen" Link eine etwas "vornehmere" Ansicht zu platzieren, ist bekannt.In der Iconbar unter [url][/url] integriert.Weiß aber jemand von euch, wie es möglich gemacht werden kann, dass in einem Beitrag ein Bild angezeigt wird und beim Klick da...
forum_message forum_message
spotter46 und 1 weitere haben 8 neue Beiträge im Thema Mitgliederliste für bestimmte Usergruppe sichtbar einstellen geschrieben.
Zitat von Andreas Lipske im Beitrag #13Profilfelder in der Userliste abschaltenHatte ich vor Jahren mal installiert....und dann vergessen Hmmm , das ist bei uns auch installiert, aktuelle Version 0.060, aber ohne Probleme.Bei uns kann jede Gruppe die Mitgliederliste einsehen - Gäste natürlich ausgen...
rating rating
Andreas Lipske hat sich bedankt!
Beitrag: Mitgliederliste für bestimmte Usergruppe sichtbar einstellen
%usernames% hat sich bedankt!
rating rating
Andreas Lipske hat sich bedankt!
Beitrag: Mitgliederliste für bestimmte Usergruppe sichtbar einstellen
%usernames% hat sich bedankt!
forum_message forum_message
spotter46 und 1 weitere haben 2 neue Beiträge im Thema Mitgliederliste für bestimmte Usergruppe sichtbar einstellen geschrieben.
Wird die Mitgliederliste nur bei dieser Gruppe nicht angezeigt, oder generell nicht bei Aufruf /userlist.php ?
forum_message forum_message
Ludger hat einen neuen Beitrag im Thema Dennis geschrieben.
Dennis ist doch schon seit Jahren dabei ... nur längere Zeit nicht in Erscheinung getretenlt. Mitgliederliste zwar nichtmeine seinen Namen schon vor Jahren gelesen zu haben
forum_message forum_message
spotter46 und 1 weitere haben 2 neue Beiträge im Thema Mitgliederliste für bestimmte Usergruppe sichtbar einstellen geschrieben.
Hallo Andreas,eigentlich ging ich bisher davon aus, dass die Rechteeinstellungen im Bereich Admin > Layout > Navigationoft automatisch richtig eingestellt sind, aber Versuch macht klug.Also empfehle ich mal im Navigationsbereich bei Mitgliederliste die erweiterten Einstellungen zu prüfen.[[File:Scre...
forum_message forum_message
River hat einen neuen Beitrag im Thema Mitgliederliste für bestimmte Usergruppe sichtbar einstellen geschrieben.
Hallo Andreas,Das sollte zu finden sein unter: Admin > Gruppen - dort die jeweilige Benutzergruppe anklicken > nach unten scrollen zu Sektion 'Zugriffsrechte'.Dort gibt es die Option: Einblick der Mitgliederliste & Profile - wo man den Toggle-Button aktivieren muss.Viele GrüßeRiver
rating rating
River und 1 weitere haben sich bedankt!
Beitrag: Dennis
%usernames% haben sich bedankt!
forum_message forum_message
River und 3 weitere haben 4 neue Beiträge im Thema Dennis geschrieben.
Zitat von l2otbart_57 im Beitrag #4Das Aufgabenfeld von Denis scheint ein anderes zu sein.Ja, ich glaube auch, dass Denis eher bei der Technik im Background unterwegs ist und hier im Forum so ein Test-Unterforum hat, wo er immer mal was testet.Jedenfalls ist es bestimmt toll bei der Technik im Backg...
rsummary rsummary
Ingmar hat 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Mike48 und 2 weitere haben 4 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
rsummary rsummary
Andreas Lipske hat 2 Beiträge bewertet (Details)
%usernames% hat sich bedankt!
Wer ist Online?
5 Mitglieder und 75 Gäste sind Online
Besucher Statistiken
80 Aktive User
5 Mitglieder und 75 Gäste sind Online:
nobody, Sternenfrau, JanB, Mike48, spotter46


Besucherrekord
1274 Benutzer gleichzeitig online (11.10.2019 18:19)

Besucherzähler
Heute waren 9230 Gäste und 22 Mitglieder, gestern 9484 Gäste und 22 Mitglieder online.

Statistiken
Themen 42087
Beiträge 308373
Mitglieder 12.595
Forum empfehlen