Seite 1 von 1

Threads auslesen, verarbeiten und neu darstellen

Verfasst: Fr 24.Aug, 2007 17:12
von Shauku
Mein Ziel: Ich möchte Inhalte von Threads die in einem speziellen Subforum (eine ID) stehen auslesen, alles was nicht in einem speziellen BBCode steht wegwerfen und alles was übrig ist aufgelistet in eine Tabelle mit dem Namen des Verfasser und Datum der letzten Modifikation schreiben. Also:

Inhalt 1. BBCode - Verfasser - Datum
Inhalt 2. BBCode - Verfasser - Datum
Inhalt 3. BBCode - Verfasser - Datum
...

Umsetzungen: Ich hab keine Idee, wie ich das angehen soll, da ich vermeiden will, dass bei jedem Seitenaufruf alle BBCodes immer wieder neu ausgelesen werden (Pro User sind das ca. 100 - 200 solcher BBCodes, was bei nur 10-20 Usern schon... naja, da kommt ein bisschen was zusammen, ich kann nicht abschätzen, ob das nicht irgendwann etwas zu viel wird) . Da die User in besagtem Forum ihre Threads auch "mal" (=Regelmässig) verändern, bin ich von der "schreiben wir alles in ne Datenbank" Idee auch wieder ein wenig abgekommen und schwimm jetzt ein bisschen Ziellos umher. Vielleicht ein Cronjob? Vielleicht ganz die Finger von weglassen? Meine MySQL Kenntnisse haben noch nicht viel Praxis gesehen.

Hoffe, dass war verständlich ^2 . Hat jemand ein paar Tips oder gute Codeschnipsel für mich?

Verfasst: Fr 24.Aug, 2007 18:19
von AmigaLink
Wenn man wüsste von welcher Ausgangsposition du da redest, könnte man evtl. auch nen Tipp geben.

Du hast ein Forum in dem jeder User einen eigenen Thread hat?
Aus diesem Forum möchtest du eine art Newsliste erstellen, in der aus jedem thread die letzte Änderung angezeigt wird?
Soweit kann ich das evtl. noch nachvollziehen. Aber was soll das Filtern der BBCodes? Und warum 100 bis 200 pro User???
Was hat es mit diesen BBCodes auf sich? Und meinst du wirklich BBCodes?

Verfasst: Fr 24.Aug, 2007 19:07
von oxpus
Ja, so ganz folgen kann ich hier auch nicht wirklich.

Verfasst: Fr 24.Aug, 2007 21:04
von Shauku
Ok, also mal Praxisbezogen. Ich hab einen BBCode der heisst

Code: Alles auswählen

[card][/card]
. In diesen Code werden Kartennamen reingesetzt (Karten eines Sammelkartenspiel). Jetzt haben User von mir in einem Subforum Threads, wo sie Tauschkartenlisten pflegen. Die möchte ich auslesen (mit Namen des Poster und Datum) und ausserhalb des Forums gesondert Darstellen (in einer Tabelle) .

Ich hab den Usern bis jetzt ein Formular zur Verfügung gestellt, über dass sie die Karten eingeben können, aber das dauert den meisten zu lange, wird falsch bedient und auch nicht vernünftig angenommen. Die meisten posten ihre Listen lieber im Forum.

Verfasst: Sa 25.Aug, 2007 21:08
von AmigaLink
A-ha - Und in den Beiträgen sind nicht nur die Karten enthalten, sondern auch noch anderer Text den du nicht übernehmen möchtest?!

Spontan würde mir dazu nur eine eigenständige bbcode.php einfallen, die den CARD-Tag parst und den Rest verwirft.

Verfasst: Sa 25.Aug, 2007 22:25
von Shauku
Ja, da ist noch anderer Text drinnen. Und auch mehr als eine Karte, deswegen würde sich der [card] BBCode anbieten, da den die meisten sowieso schon verwenden (der linkt auf eine externe Kartendatenbank-Seite, aber das tut hier ja nichts zur Sache).

Ich hab an das Auslesen der Posts gedacht ( Text in ne Variable ), verarbeiten der Posts: bis [card] suchen, Inhalt bis [/card] in einem Array speichern und den Text weiter durchgehen, bis zum nächsten [card] .
Aber was mach ich dann mit dem Array? Ausgeben und jedesmal neu auslesen? Ich will ja gewährleisten, dass wenn wer seinen Threat editiert, dass auch in die Tabelle aufgenommen wird.

Erklär deine spontane Idee mal plz etwas näher :) . Oder gibts vielleicht nen Mod, der Quotes ausliest und zitiert oder irgendwelche Schnipsel, die sich hier verwenden lassen könnten?

Verfasst: So 26.Aug, 2007 00:52
von oxpus
Öhm, ist nun klar, was Du willst, aber Dir dürfte dann auch klar sein, oder zumindest nach meinem jetzigen Post, daß eine solche Anzeige schon zu Seiten-Timeouts führen kann!
"Wenige" BBCodes aus einem Post auszulesen ist schon schwer und aufwendig genug (ich hatte vor kurzem erst den Link Spider entwickelt), 100-200 BBCodes aus ettlichen Posts rauszuholen ist da schon extrem aufwendiger, zumindest in der Verarbeitungsroutine.
Ich würde da wirklich eher vorschlagen, daß man eine Kartenverwaltung aufzieht, in der die User ihre Karten eintragen.
In einem Post ist das zwar auch nett, aber diese dann in anderen Listen zu verwalten, wo es eben um sehr viele Karten geht, ist nunmal extrem schwierig.

Bei den Mengen an Daten könnte das über kurz oder lang sogar den Server in arge Bedrängnis bringen...

Verfasst: So 26.Aug, 2007 02:05
von AmigaLink
Bei den Mengen an Daten könnte das über kurz oder lang sogar den Server in arge Bedrängnis bringen...
Das kommt jetzt ganz drauf an was er da genau möchte und wie man das Umsetzt.

Wenn ich das richtig Verstehe, dann möchte er nur eine Darstellung der Posts ohne den Inhalt der nicht in einem CARD-Tag steht.
Wenn man das richtig Umsetzt, dann kostet das den Server sogar noch weniger Arbeit als die Original Darstellung des gleichen Beitrages. :)

Mein Gedanke diesbezüglich ist, wie in #5 bereits angedeutet, eine gesonderte bbcode.php
Das "News"-Skript liest die Beiträge aus der Datenbank (genau wie die viewtopic.php) und Jagd diese dann nicht durch die bbcode.php sondern durch die zweite bbcode.php die wiederum nichts anderes kann, als den CARD-Tag zu parsen. (Nein ICH Programmiere das nicht!)


Die Original bbcode.php geht ja hin und sucht in der Textvariable nach [card:bbcode_uid]blablabla[/card:bbcode_uid].
Jede Fundstelle ersetzt sie dann durch den entsprechenden Eintrag in der bbcode_body.tpl.
Wenn man jetzt hingeht und die Fundstelle nicht ersetzt sondern das Ergebnis in einer neuen Variable speichert, hat man am ende ein Variable in der nur der gewünsche Inhalt zu finden ist. :)
Das ist etwas Rechenintensiver als das einfache Ersetzen. Aber dadurch das die card_bbcode.php nichts anderes macht als nach dem CARD-Tag zu suchen und die normale bbcode.php gar nicht ins Spiel kommt, sollte das nicht wirklich ein Problem darstellen.

Verfasst: So 26.Aug, 2007 02:08
von oxpus
Genau das meinte ich ja und da liegt eben das Problem:
Wenn ettliche User 100-200 und mehr Karten posten, dann braucht preg_match schon sehr lange, das Ergebnis zu liefern.
Ich habe mit dem Link Spider bei 1-2 Links in einigen Posts schon Performanceverluste zu bemerken, daher will ich an 100-200 BBCodes je Post gar nicht erst denken :(

Verfasst: So 26.Aug, 2007 02:21
von AmigaLink
Moment, die Beiträge existieren doch bereits und werden Problemlos von der viewtopic.php Dargestellt (so Verstehe ich das zumindest). Die Menge der BBCodes sollte somit kein Problem darstellen, denn die bbcode.php muss wehsentlich mehr Leisten als die card_bbcode.php. ;)
Um den Server nicht unnötig zu belasten, kann man noch mit einem Cache (wie mein CPS) Arbeiten, der einmal am Tag erneuert wird um einigermaßen Aktuelle Daten zu gewährleisten.

Verfasst: So 26.Aug, 2007 10:25
von oxpus
Dann kannst Du Dich ja da mal dran versuchen ;)

Verfasst: So 26.Aug, 2007 12:29
von AmigaLink
Nee danke. Mein Kopf ist derzeitig noch mit ganz anderen Umsetzungen belastet.

Verfasst: Mo 27.Aug, 2007 00:15
von Shauku
Hum. Danke für die Tips, hat schonmal etwas geholfen. Ich werd das wohl bei Gelegenheit noch mit nem Freund näher bequatschen.
Den Inhalt der Topics find ich ja in der DB unter phpbb_topics . Weiss einer von euch ungefähr, wo die Poständerungen ("1,2,3 mal editiert am") hinterlegt sind? ^2

Verfasst: Mo 27.Aug, 2007 00:27
von oxpus
Das ist im Post selber, also in der Tabelle phpbb_posts zu finden.

Verfasst: Mo 27.Aug, 2007 10:50
von Shauku
[quote="oxpus";p="76348"]Das ist im Post selber, also in der Tabelle phpbb_posts zu finden.[/quote]
Also keine extra Tabelle, wo er die Zahl der Editierungen hinterlegt? Ok, thx.

Verfasst: Mo 27.Aug, 2007 11:05
von oxpus
Nein.