Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste
Anzeige neuer Postings
#11
Naja, die bisherige Logik ist:

- Gehe das Forum samt aller Unterforen durch, um den allerneusten Post zu finden
(Dieser allerneuste Post wird dann auch in der rechten Spalte angezeigt).
- Markiere Forum als ungelesen, wenn das Datum des allerneusten Post neuer als Datum des Forum zuletzt gelesen Timestamps

Und da Foren und Unterforen getrennte "zuletzt gelesen" Timestamps haben, kann es eben passieren, dass das Parent-Forum schon länger nicht mehr gelesen wurde, das Unterforum aber schon. Der allerneuste Post im Unterforum ist dann schon gelesen, aber da der Timestamp des allerneusten Post neuer ist, als der "zuletzt gelesen" Timestamp des Parent-Forums, wird es als ungelesen markiert. Und das ist einfach falsch.

Die Logik die ich versucht habe zu implementieren ist:

Markiere das Forum als ungelesen, wenn
- das neueste Posting in diesem Forum (nicht in den Unterforen) neuer ist als der zuletzt gelesen Timestamp
(bis hierher ist das Verhalten identisch zur alten Logik - es klappt nur bei Foren ohne Unterforen)
- oder wenn eines der Unterforen als ungelesen markiert ist

Und das scheint bei mir zu funktionieren. Wo ist mein Denkfehler und welche Schwierigkeiten gibt es da noch?

(Abgesehen von den Bugs die dadurch zutage getreten sind, etwa dass "Forum als gelesen markieren" nicht alle Unterforen als gelesen markiert).

Ich würde das Problem halt gerne nachvollziehen. Der Dev im englischen Forum sagt es würde zuviel CPU kosten, hat aber keine Erklärung dafür was daran jetzt mehr CPU kosten soll als vorher (die Foren werden bereits in der jetzigen Version rekursiv durchlaufen - um das allerneuste Post zu finden). Du sagst du könntest mir einige Schwiergkeiten aufzählen, ohne konkret zu werden.

Kann das irgendjemand ausführen oder gibts evtl. einen Diskussionsthread dazu irgendwo wo ich mich über die Problematik schlauer machen kann?
#12
Wer sagt denn, dass man schon alle Themen im Forum gelesen hat? Das MyBB fragt dies eben noch ab. Und je mehr Foren abgefragt werden müssen, desto mehr wird die Datenbank beansprucht. Deine Lösung ist einfach, hat aber den genannten Haken.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
#13
Warum ist es wichtig, ob alle Themen gelesen sind? Die jetzige Logik kümmert sich da doch auch nicht darum, die schaut nur nach dem neuesten Posting (und zeigt als neu an obwohl es schon gelesen ist).

Bei der lightbulb geht es ja nur darum ob ein neues Posting dazugekommen ist, seit dem du das letzte Mal reingeschaut hast. Eine detaillierte Auflistung welche Themen gelesen sind und welche nicht bekommst du erst wenn du ins Forum reingehst. Wenn du reingehst und das neuste Thema liest dann wird dein Lese-Timestamp für das Forum aktualisiert. Daß da noch ältere ungelesene Postings sind wird jetzt und auch bei der neuen Logik in der Lightbulb dann nicht mehr angezeigt, das will ich aber ja auch gar nicht.

Wo ist da jetzt der Haken? Undecided
Auf einen Denkfehler bei mir bin ich gekommen:

Meine Lösung markiert ein Forum als 'an', wenn eines der Unterforen 'an' ist.

Die Idee dabei war daß man einen Pfad bekommt, der einem zum neuen Posting führt * Forum > * Unterforum > * Unterunterforum > * ... usw. und wenn man das Posting im Unterunterunterforum liest sind die Foren darüber wieder aus (sofern es keine anderen neuen Postings dort gibt). In einem Newssystem wird das so gehandhabt, da man die News ja auch finden können muss und News in einer Unterkategorie nicht untergehen sollen.

Jetzt bin ich aber draufgekommen, daß das bei einem Forum nicht so gehandhabt wird. Sprich bisher kann man das Forum als gelesen markieren, auch wenn ein Unterforum noch ungelesen ist. Bei Foren kann das Sinn machen, da User ja nicht unbedingt an jedem Unterforum interessiert sind, sich aber - anders als bei News - von Unterforen die sie nicht interessieren auch nicht 'abmelden' können.

Daher müsste ich meine Lösung verbessern, und zwar so, daß ein Forum markiert wird, wenn ein Unterforum 'an' ist UND der Timestamp dieses 'an' neuer ist, als der gelesen Timestamp des Forums.

Ich baue das mal, mal sehen was daraus wird...
#14
(09.11.2008, 21:16)Michael schrieb: Es wäre denkbar diese Funktion mit ausreichenden Kenntnissen als Plugin nachzurüsten. Das wäre sicherlich für viele interessant.

Ich habe mir das Plugin-System mal angeschaut. Mit den Hooks kann man sich zwar praktisch überall einhaken um z.B. an der Stelle zusätzliche Informationen einzublenden. Manche Hooks erlauben sogar Datenmodifikation.

Aber es scheint damit nicht möglich zu sein, z.B. die forumdisplay.php davon abzubringen, build_forumbits() aufzurufen bzw. anstelle von build_forumbits() meine eigene custom_build_forumbits() aufzurufen. Oder kann man in PHP mit den Plugins irgendwie bereits existierende Funktionen einfach so neu definieren / überschreiben?

Für meine Funktionalität muss ich ja gerade die build_forumbits() durch eigenen Code ersetzen, wenn das mit Plugins nicht geht wird es wohl weiterhin ein Patch bleiben müssen. Oder ich mache einen Minipatch der mir an der Stelle einen neuen Hook mit Rückgabewert einsetzt.
#15
Da musst du die Dateien verändern. Plugins sollen die Funktionen ja eher erweitern.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
#16
Da müsste tatsächlich eine Codeänderung erfolgen, da die erneute Definition in PHP nicht ohne Weiteres möglich ist. Sollte der Hook Sinn machen (oder der gesamte Fix), währe eine Übername in den Code des Forums auch denkbar.

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.
#17
Plugin hätte halt den Vorteil, damit würden sich evtl. mehr Leute das überhaupt mal anschauen. Wink Ich probiers daher mal mit Hook einfügen, dann müsste jemand der es testen will nur 2-3 Zeilen Code ändern statt 200-300... außerdem wollte ich eh noch ausprobieren wie das Plugin-System bei MyBB funktioniert.
#18
Hier ein Zwischenstand - gelöst als Plugin mit 2 Funktionen, 2 Stellen müssen im MyBB Code geändert werden damit die Funktionen auch aufgerufen werden, falls das Plugin aktiviert ist. Mit Hooks hat es leider wegen der Parameterübergabe nicht geklappt, stattdessen Test mit function_exists() ob die Funktionen des Plugins vorhanden sind.

Da ich kein Grafiker bin sind die Icons auf Basis der alten Icons generiert worden. Lediglich dem miniofflock.gif habe ich ein paar rote Pixel spendiert, da das aus irgendeinem Grund von Haus aus identisch ist mit minioff.gif. Man sah im alten Forum also gar nicht wenn ein Unterforum gelocked war obwohl der alte Code das schon verstanden hat.

Siehe Bild um eine Idee zu bekommen, was das Plugin macht (mal abgesehen davon daß es nicht mehr falscherweise ein Forum als ungelesen markiert).

Was noch nicht funktioniert, ist das als gelesen markieren AJAX... der Javascript-Code kennt die neuen Icons nicht und wählt daher den falschen Ersatz, das ist allerdings eine triviale Änderung, mir ists jetzt aber zu spät um das noch zu fixen.

Ich mache das mit dem AJAX morgen und dann werde ich eine erste BETA des Plugins, Version 0.1, unter GPL veröffentlichen. In der Hoffnung daß sich vielleicht ein paar Menschen dafür interessieren, es ausprobieren, und Fehler melden. Und so weiter.

Zur CPU-Frage:
Ich habe einen kleinen Benchmark auf meinem Testforum laufen lassen (Foren mit Unterforen und Unterunterforen insg. 50 Stück), und diese Forenanzeige ein paar tausend Mal in einer for-Schleife bauen lassen. Mein Plugin macht das etwas langsamer als das Original, 0.013 Sekunden pro Aufbau statt 0.012 Sekunden, also ca. 8% langsamer als vorher (unter PHP4). Wenn man >100 Hits pro Sekunde auf die index.php bekommt ist es möglicherweise ein Problem.

Aber da ich nach wie vor den Originalcode nur minimal modifiziere, sind da ein paar umständliche Krücken drin. Ich bin sicher daß jemand der sich mit PHP Programmierung auskennt (ich mache _nie_ was mit PHP, meine Lieblingssprache ist Python), da einiges findet was man optimieren kann.

In diesem Sinne gute Nacht & bis morgen...


Angehängte Dateien Thumbnail(s)
   
#19
Hier das Plugin:
http://community.mybboard.net/thread-40381.html

Da das Allgemein-Forum hier nicht für Plugin-Support genutzt werden soll mache ich evtl. hier noch einen Thread dazu auf.
#20
Vielen Dank für die Arbeit! Ich werde da nachher mal reinschauen. Wink

Gruß,
Michael
[Bild: banner.png]
Support erfolgt NUR im Forum!
Bitte gelöste Themen als "erledigt" markieren.
Beiträge mit mangelhafter Rechtschreibung/Grammatik werden kommentarlos gelöscht.