Toon posts:

[php] Topic gezien, ander plaatje?

Pagina: 1
Acties:
  • 153 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een groot forum, zelf maken, admin etc. Zoiets als TopiX bijv. maar dan in mijn eigen stijl en manier en keuzes.

Ik heb nooit geweten hoe je ervoor kunt zorgen dat als iemand een topic heeft gezien in het forum er een ander plaatje komt dan wanneer je die niet hebt gezien (bijv. niet gezien = oudplaatje.gif en wel gezien = nieuwplaatje.gif). En als er een nieuwe reply komt, dat er dan weer nieuwplaatje.gif komt te staan.

Afijn ik hoop dat je het snapt, het zit anyway in vele forums.

Je hebt er meerdere manieren voor, maar zelf kan ik er ook wel een bedenken, maar dies niet efficient en handig: "Alle id's per user in de DB flikkeren :P".

Daar heb je dus niks aan, maar er is dus een (zoals zo vaak in PHP) simpele manier om dit te voltooien zonder (wat) mankementen (zoals bij mijn idee :)).

Alvast bedankt als je me wat op weg kunt helpen.

Overigens: De search leverde weinig bruikbaar materiaal, zover ik heb gezocht.

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Niet gezien/wel gezien wordt niet bijgehouden. Wel bijvoorbeeld de de nieuwe topics sinds je laatste bezoek of die van een bepaalde tijd geleden.
Die tijd kan je dus opslaan in een cookie oid.

Verwijderd

yep..cookies

Verwijderd

Topicstarter
Op donderdag 17 januari 2002 18:20 schreef sjaak1000 het volgende:
yep..cookies
Dat lijkt me wel logisch :P, met sessies wordt het een zootje ;)

Maar goed, ik heb dit al vaker gehoord, maar kennelijk schijnt het de enige manier te zijn, toch bedankt.

Verwijderd

Topicstarter
Maar toch...

Ik heb eens in wat forumpjes gekeken (OpenBB, PHPBB 1 en 2 etc.) en daar lukt het dus wel (per topic kijken hoe of wat).

Maar door al die templates en (verborgen?) variablen snap ik er weinig van...

Heeft misschien iemand ervaring met deze methode, zo ja, zou je het een beetje globaal uitkunnen leggen(?)

Alvast bedankt.

  • Grum
  • Registratie: Juni 2001
  • Niet online
zover ik weet houdt geen 1 bord (wat groot is) bij welke post je hebt gelezen en welke niet

wat ze meestal wel doen is bijhouden wat de laatste datum is dat jij ingelogged bent geweest en wat er dus nu nieuw voor jou is ...

  • JoostBaksteen
  • Registratie: December 2000
  • Laatst online: 27-03 19:32
[ranzige manier]

Je kan als je perse per topic wilt het allemaal in een cookie opslaan. Je maakt bijvoorbeeld 2 cookies:

id-id2-id3

en

tijd-tijd2-tijd3

Nu kan je het cookie exploden op een "-". Dus word het een array -> je kan kijken of het id van de topic in je cookie staat. Staat het kijk je naar de tijd is de tijd ouder dan de laatste reply -> nieuwe replys anders niet.

Je zou het zo kunnen doen........ maar ja of je dat wilt. Eist erg veel proc load lijkt me als je dat 100 keer per pagina checkt, per hit.
[/ranzige manier]


/edit LOL :D :D wil net replyen krijg ik #23 :D :D die heb ik nog NOOITTTT gezien :D :D moest opnieuw inloggen en nu werkt het weer :)

Verwijderd

Topicstarter
Ok, die manier had ik ook wel bedacht maar dat vreet dus veel...

Maar hoe doen ze het dan? Check eens: OpenBB. En open eens een topic en ga weer terug (via Back: ff refreshen natuurlijk) en dan zie je toch echt enkel bij dat topic het plaatje veranderen...

En als je dat doet met 1 cookie dan gaat dat niet zo...

  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op vrijdag 18 januari 2002 15:41 schreef Grum_ het volgende:
zover ik weet houdt geen 1 bord (wat groot is) bij welke post je hebt gelezen en welke niet

wat ze meestal wel doen is bijhouden wat de laatste datum is dat jij ingelogged bent geweest en wat er dus nu nieuw voor jou is ...
Idd vooral dat groot gedeelte wordt op een gegeven moment kritisch. Ik had het eerst wel gemaakt, door in een logtabel vast te leggen welke topic, wanneer, door wie voor het laatst gezien is (in mysql) en die gegevens vergelijken met de laatste post in een topic.

Het werkt wel, als je er een index overheen gooit zelfs nog redelijk snel. Maar ik denk niet dat je dat op een forum wil gaan doen met honderden dan wel duizenden simulatane gebruikers. (of je moet een dikkere machine inzetten, ik heb slechts een p1-166 MMX tot mijn beschikking, en zoals ik zei dat gaat redelijk zolang er niet te veel gebruikers zijn)

..so be wary of any man who keeps a pig farm..


Verwijderd

Topicstarter
Ik zal nog maar eens een keer goed gaan kijken hoe ze het doen :P in phpBB etc.

  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 25-04 02:41
Op vrijdag 18 januari 2002 15:55 schreef Markuz het volgende:
Ok, die manier had ik ook wel bedacht maar dat vreet dus veel...

Maar hoe doen ze het dan? Check eens: OpenBB. En open eens een topic en ga weer terug (via Back: ff refreshen natuurlijk) en dan zie je toch echt enkel bij dat topic het plaatje veranderen...

En als je dat doet met 1 cookie dan gaat dat niet zo...
Je kunt ook meerdere dingen in een cookie neerzetten, bijv:

Cookie = "123232|23232|9834|56421|563212"

Echt efficiënt is het niet, maar het gaat tenminste niet van je eigen schijfruimte af :7 ...

  • JoostBaksteen
  • Registratie: December 2000
  • Laatst online: 27-03 19:32
phpBB is een 'in meedere mate IMHO' ranzig board. Die hebben alleen al 25 query's postreply.php.

Bedenk zelf iets zou ik zeggen, dat kan alleen maar beter zijn.

/edit iets diplomatieker opgeschreven, 'tis tenslotte vrijdag :+

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 10-05 16:54
Op vrijdag 18 januari 2002 15:55 schreef Markuz het volgende:
Ok, die manier had ik ook wel bedacht maar dat vreet dus veel...

Maar hoe doen ze het dan? Check eens: OpenBB. En open eens een topic en ga weer terug (via Back: ff refreshen natuurlijk) en dan zie je toch echt enkel bij dat topic het plaatje veranderen...

En als je dat doet met 1 cookie dan gaat dat niet zo...
Ben ik nou gek? Ik zie namelijk totaal geen verschil.
Op vrijdag 18 januari 2002 16:19 schreef joostbaksteen het volgende:
phpBB is een f**king ranzig board man. Die hebben alleen al 25 query's postreply.php man!!

Bedenk zelf wat zou ik zeggen, dat kan alleen maar beter zijn.
Ga jij maar eens even naar phpBB2 kijken. Zoals uit de code blijkt is phpBB2 al heel wat beter in elkaar gezet, en er zijn zeker geen 25 queries nodig om een reply te posten.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • Ozzi
  • Registratie: Mei 2000
  • Laatst online: 09:33

Ozzi

??

Op vrijdag 18 januari 2002 16:33 schreef Taradino het volgende:

[..]

Ben ik nou gek? Ik zie namelijk totaal geen verschil.
[..]

Ga jij maar eens even naar phpBB2 kijken. Zoals uit de code blijkt is phpBB2 al heel wat beter in elkaar gezet, en er zijn zeker geen 25 queries nodig om een reply te posten.
waarom staat er dan onderaan op de index dit:
phpBB Created this page in 0.542583 seconds : 14 queries executed : GZIP compression disabled : Debug Mode
of als je een bericht post:
phpBB Created this page in -0.507489 seconds : 22 queries executed : GZIP compression disabled : Debug Mode
:?

geen


  • RobzQ
  • Registratie: Februari 2000
  • Laatst online: 21-12-2020

RobzQ

greedy as a pig

Op vrijdag 18 januari 2002 17:50 schreef Ozzi het volgende:

[..]

waarom staat er dan onderaan op de index dit:
[..]

of als je een bericht post:
[..]

:?
Omdat hij niet alleen insert maar ook vele andere zaken moet nachecken alvorens de pagina opnieuw op te bouwen.

..so be wary of any man who keeps a pig farm..


  • JoostBaksteen
  • Registratie: December 2000
  • Laatst online: 27-03 19:32
Op vrijdag 18 januari 2002 19:11 schreef RobzQ het volgende:

[..]

Omdat hij niet alleen insert maar ook vele andere zaken moet nachecken alvorens de pagina opnieuw op te bouwen.
Ok is goed, hij moet dingen ophalen, maar 22 vind ik dan nog wel een beetje veel.

Een goed forum is niet zo geschreven dat hij 22 query's nodig heeft bij postreply. IMHO.

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op vrijdag 18 januari 2002 17:50 schreef Ozzi het volgende:
waarom staat er dan onderaan op de index dit:

of als je een bericht post:
Oude versie van php op een windows-server? :)
Is dit trouwens phpBB 1 of 2? Zoals Taradino al zei is 2 een stuk beter dan 1..

  • Ozzi
  • Registratie: Mei 2000
  • Laatst online: 09:33

Ozzi

??

Op vrijdag 18 januari 2002 19:32 schreef PlayR het volgende:

[..]

Oude versie van php op een windows-server? :)
Is dit trouwens phpBB 1 of 2? Zoals Taradino al zei is 2 een stuk beter dan 1..
dat is 2 onder win

geen


  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op vrijdag 18 januari 2002 19:34 schreef Ozzi het volgende:
dat is 2 onder win
Hmmz.. dat lijkt me idd niet al te fijn :)

Heb de code van phpBB2 nog nooit bekeken, maar ik vertrouwde taradino eigenlijk wel :)

Verder draai je wel een erg oude php of niet? daar zit namelijk een bug in dat microtime() af en toe verkeerde waarden aangeeft (vandaar dat die tweede tijd negatief is..)(of is dat een bug?)

  • JoostBaksteen
  • Registratie: December 2000
  • Laatst online: 27-03 19:32
Het was forum is: "Powered by phpBB 2.0 RC-2 © 2001"

Ok, het is iets minder erg dan ik eerst dacht:
phpBB Created this page in 1.077824 seconds : 13 queries executed : GZIP compression disabled : Debug Mode
13 Queries op de index.php

Maar dan ben ik toch benieuwd hoe hij daarbij komt... Als ik queries ga tellen:

1. Log insert
2. Rechten, userinstellingen select
3. Fora acces select (kan ook bij 2 erin, mits goed datamodel)
4. Alle Fora en Categorien select
5. Instellingen select
6. Who's online select
7. Who's online update

Ok, ik ben op de helft gekomen...

  • Ozzi
  • Registratie: Mei 2000
  • Laatst online: 09:33

Ozzi

??

Op vrijdag 18 januari 2002 19:38 schreef PlayR het volgende:

[..]

Hmmz.. dat lijkt me idd niet al te fijn :)

Heb de code van phpBB2 nog nooit bekeken, maar ik vertrouwde taradino eigenlijk wel :)

Verder draai je wel een erg oude php of niet? daar zit namelijk een bug in dat microtime() af en toe verkeerde waarden aangeeft (vandaar dat die tweede tijd negatief is..)(of is dat een bug?)
ik draai zelf geen phpbb, ik ben zelf eeb forum aan het proggen dat is op een of andere site

geen


Verwijderd

Topicstarter
Op vrijdag 18 januari 2002 16:33 schreef Taradino het volgende:

[..]

Ben ik nou gek? Ik zie namelijk totaal geen verschil.
[..]
Je bent niet gek, maar scheel... :P

Of ikke? Er is toch duidelijk een verschil qua plaatje nadat je dat topic hebt bezocht. En alle andere plaatjes blijven toch intact als je die NIET gezien hebt...

Maar goed, ik zal eens dat met implode (+ explode) gaan proberen, misschien is dat wel een aardige oplossing :).

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 10-05 16:54
Op vrijdag 18 januari 2002 19:40 schreef joostbaksteen het volgende:
Het was forum is: "Powered by phpBB 2.0 RC-2 © 2001"

Ok, het is iets minder erg dan ik eerst dacht:
[..]

13 Queries op de index.php

Maar dan ben ik toch benieuwd hoe hij daarbij komt... Als ik queries ga tellen:

1. Log insert
2. Rechten, userinstellingen select
3. Fora acces select (kan ook bij 2 erin, mits goed datamodel)
4. Alle Fora en Categorien select
5. Instellingen select
6. Who's online select
7. Who's online update

Ok, ik ben op de helft gekomen...
1. Config data grabben.
2. Session data grabben.
3. Als er 60 secs voorbij zijn, sessietijd updaten.
4. Delete oude sessies.
5. Selecteren categorieën.
6. Selecteren forums + laatste post + poster daarvan.
(Combineren van 4 en 5 zou trouwens een té grote join geven, ik denk dat de read locks dan wat te lang worden.)
7. Selecteren moderators van elk forum.
8. Who's online.
9+10+11. postcount, usercount, newestuser
12. Call naar auth(), de functie die alle authenticatie regelt, om te checken tot welke fora de user toegang heeft.

Dat zijn er 12, misschien niet helemaal in de goede volgorde, maar toch. Dat is gewoon het nadeel van een forum met veel features als phpBB. Ik heb op mijn eigen forum ook veel minder queries(3, forum, categorie, authenticatie), maar die heeft dan ook niet alle functies(wat zeg ik, niet alle? :P) die phpBB2 heeft. In het gratis, vrije(en daar bedoel ik dus GPL en soortgelijk mee) deel van de fora is phpBB2 IMO de beste. Er zijn zeker wel betere fora, maar niet gratis, en zeker niet vrij.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 10-05 16:54
Op vrijdag 18 januari 2002 22:48 schreef Markuz het volgende:

[..]

Je bent niet gek, maar scheel... :P

Of ikke? Er is toch duidelijk een verschil qua plaatje nadat je dat topic hebt bezocht. En alle andere plaatjes blijven toch intact als je die NIET gezien hebt...

Maar goed, ik zal eens dat met implode (+ explode) gaan proberen, misschien is dat wel een aardige oplossing :).
Bij mij is het toch elke keer hetzelfde plaatje? Het is elke keer icon0.gif. Het aantal views wordt wel geupdate, maar ik zie geen plaatje veranderen. Ben je ingelogd of zo, dat OpenBB het dan wel bijhoudt?

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


Verwijderd

Ik weet niet of het werkt...

Zet de kleur van een visited link op een kleur die net iets anders is dan een gewone link.

Lees met javascript de kleuren van de links uit, en verander het plaatje nog even snel naar het andere plaatje.

Het zou geen geklooi met cookies betekenen, aangezien de browser het zelf bijhoudt.

Verwijderd

Topicstarter
Ok...

Maar als er dan een nieuwe reactie wordt geplaatst, dan blijft de link en dus ook in het verlengstuk daarvan, het plaatje op zeg maar 'oud' staan...

Verwijderd

Op zaterdag 19 januari 2002 10:06 schreef Markuz het volgende:
Ok...

Maar als er dan een nieuwe reactie wordt geplaatst, dan blijft de link en dus ook in het verlengstuk daarvan, het plaatje op zeg maar 'oud' staan...
;) Juppzz, geen goeie oplossing dus, gewoon bijhouden bij elk topic wat de laatste post was, en in een cookie de laatste visit van de user bij houden, sim-pel, die ff vergelijken,
if postcount > cookiecount then
nieuws
else
oud.

Sim-pel

Verwijderd

ik kan me vergissen hoor (ik ben ook met zoiets bezig) maar als jij alleen kijkt naar de tijd waarop de gebruiker voor het laatst geweest is en die vergelijk je met de tijd waarop een topic gemaakt is dan wil je waarschijnlijk een updateje geven zodat hij de topic niet meer als nieuw ziet

maar zodra je dat doet en je update bijv. de tijd dan staan alle topics meteen niet meer op nieuw (lijkt mij tenminste)

waar ik aan dacht:

zodra je inlogt een query geven die alle topics eruit trekt die later zijn gemaakt als jouw laatste inlogtijd

die knal je als een mooie string in je session ergens en daarmee als je bijv op een nieuwe topic komt de id die je in je session hebt opgeslagen eruit kickt ... aleen zit je dan dat je session steeds moet updaten met de nieuwste topics denk ik :'(

Verwijderd

waarom nu weer oude topics omhoog halen . . :? is al 2 of 3 maanden oud..

Verwijderd

omdat ik deze topic wel interesant vond en omdat er nog niet echt een duidelijk antwoord op was gegeven vind ik

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:19

chem

Reist de wereld rond

en jou antwoord is ook niet geweldig :)
stel we nemen got en we nemen een bezoeker die eens per 3 weken komt. Heb je ENIG idee hoeveel nieuwe topics er dan zijn? :)

Klaar voor een nieuwe uitdaging.


Verwijderd

ik zeg ook niet dat ik de ideale oplossing heb :)
misschien inspireert dit mensen weer tot nieuwe ideeen! :P
er staat iig hoe ze het niet moeten doen :P

maarreuhm ja als ik 3 weken niet op GoT kom ofzo ja dan zijn er asociaal veel nieuwe topics

dus weet jij een snelle manier ervoor?

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09-2025

djc

Op donderdag 11 april 2002 09:45 schreef chem het volgende:
en jou antwoord is ook niet geweldig :)
stel we nemen got en we nemen een bezoeker die eens per 3 weken komt. Heb je ENIG idee hoeveel nieuwe topics er dan zijn? :)
En bovendien, je mist alle topics die je nog nooit heb bezocht, maar die wel gemaakt zijn voordatjij twee keer geleden inlogde.

Rustacean


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:19

chem

Reist de wereld rond

er is geen ideale manier om van ELK topic de status bij te houden.
De enige manier waarop je dat op user-basis kan bijhouden is server-side in bv. een database.
Nu moet je altijd van het ergste geval uitgaan en dan heb je @ got sprake van 449K topics x 43k members = 19307000000 records ( dat zijn er 19,307,000,000 stuks, ca. 19,3 MILJARD)...
reken 3x een int(10) uns. (topicid, userid, timestamp) en je hebt een vrij behoorlijk tabel :)

kleine berekening: 67,93 gb excl. indices kom je dan op uit (aantal records * 30 bits) / (8 bits-tot-de-byte * 1024 * 1024 * 1024)

Klaar voor een nieuwe uitdaging.


  • TheDane
  • Registratie: Oktober 2000
  • Laatst online: 27-05 20:52

TheDane

1.618

Op donderdag 11 april 2002 09:52 schreef chem het volgende:
er is geen ideale manier om van ELK topic de status bij te houden.
De enige manier waarop je dat op user-basis kan bijhouden is server-side in bv. een database.
Nu moet je altijd van het ergste geval uitgaan en dan heb je @ got sprake van 449K topics x 43k members = 19307000000 records ( dat zijn er 19,307,000,000 stuks, ca. 19,3 MILJARD)...
reken 3x een int(10) uns. (topicid, userid, timestamp) en je hebt een vrij behoorlijk tabel :)

kleine berekening: 67,93 gb excl. indices kom je dan op uit (aantal records * 30 bits) / (8 bits-tot-de-byte * 1024 * 1024 * 1024)
dus 't zou wel moeten kunnen :P


cookies is trouwens ook geen oplossing.

je kan per domein maar een beperkt aantal cookies zetten, en een cookie heeft maar een beperkte grootte, dus je krijgt er NOOIT alle topics in die eventueel nieuw zouden zijn. (bij kleine prutsfora wel, maar dan nog zou ik 't niet via cookies doen)

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:19

chem

Reist de wereld rond

en een session moet je ook niet helemaal volplempen; die mag php elke keer gaan unserializen bij een hit...

Klaar voor een nieuwe uitdaging.


Verwijderd

hmm ja dat is zo ...
Beste oplossing: gewoon niet doen :P

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:19

chem

Reist de wereld rond

Op donderdag 11 april 2002 10:14 schreef NeoMagik het volgende:
hmm ja dat is zo ...
Beste oplossing: gewoon niet doen :P
ha!

je snapt het :)

Klaar voor een nieuwe uitdaging.


Verwijderd

oke ik schop hem nu ook .. omdat chem toch react heeft geprogd wil hij vast wel zeggen op welke geniale manier hij het voor elkaar heeft gekregen :D

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Volgens mij op de manier die ie hier al eerder roept...

NIET per user per topic opslaan, maar gewoon de laatste handelings-tijd opslaan.

Verwijderd

ACM schreef op 08 augustus 2002 @ 14:28:
Volgens mij op de manier die ie hier al eerder roept...

NIET per user per topic opslaan, maar gewoon de laatste handelings-tijd opslaan.
jah dat lijkt me vooral voor tweakers wel beter ja.. maar weet je ook hoe het precies ging.. dus met de tijden .. chem kan jij misschien, als je tijd hebt :D.. ff vertelle hoe jij het dee?

Verwijderd

chemmie chemmie chemmie waar ben ie :P

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Hallo, dit antwoord is toch niet zo moeilijk?
Bij elke pageview kijkt hij of er een session['last'] is, en als die tijd groter of gelijk is aan $now-zoveel uur dan is het rood, anders geel.

Verwijderd

Nielsz schreef op 09 augustus 2002 @ 00:07:
Hallo, dit antwoord is toch niet zo moeilijk?
Bij elke pageview kijkt hij of er een session['last'] is, en als die tijd groter of gelijk is aan $now-zoveel uur dan is het rood, anders geel.
jah maar het moet pas na een tijdje.. ik bedoel als je het topic hebt gelezen moet ie niet gelijk geel gaan.. pas als je de brouwser sluit .. als je b.v. twee weken weg bent.. en dan komt moet niet alles rood zijn. .. snap?

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Bij de eerste keer dat je hier komt: SessieID en tijd opslaan in een een cookie.
Is de SessieID ongelijk aan de vorige SessieID, dan update van tijd, anders niet

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

maar hoe doen ze het hier bij react dan ? ?

Verwijderd

Ik hou het op een iets andere manier bij: als user inlogd, wordt de datetime in db opgeslagen, en de oude eerst in een cookie geset. die wordt in iedere thread met de datetime van de last-post vergeleken.
Als de last-post nieuwer is dan de cookie, wordt er aangegeven dat er nieuwe replys zijn. Als de eerste reactie in de thread niewer is, wordt de topic als nieuw gekenmerkt.

Deze status veranderd dan pas wanneer de user opnieuw inlogd, en niet per visit.
Niet helemaal zoals de topicstarter bedoelde, maar dit was zo voor mij de gemakkelijkste methode. (anders zat ik ook aan cookie/thread te denken)

Verwijderd

Grum schreef op 18 januari 2002 @ 15:41:
zover ik weet houdt geen 1 bord (wat groot is) bij welke post je hebt gelezen en welke niet
No comment :X

  • froggie
  • Registratie: November 2001
  • Laatst online: 20-11-2024

froggie

Kwaaak

Verwijderd schreef op 09 augustus 2002 @ 18:29:
Ik hou het op een iets andere manier bij: als user inlogd, wordt de datetime in db opgeslagen, en de oude eerst in een cookie geset. die wordt in iedere thread met de datetime van de last-post vergeleken.
Als de last-post nieuwer is dan de cookie, wordt er aangegeven dat er nieuwe replys zijn. Als de eerste reactie in de thread niewer is, wordt de topic als nieuw gekenmerkt.

Deze status veranderd dan pas wanneer de user opnieuw inlogd, en niet per visit.
Niet helemaal zoals de topicstarter bedoelde, maar dit was zo voor mij de gemakkelijkste methode. (anders zat ik ook aan cookie/thread te denken)
Dit is al een stap dichterbij. Het is wel mogelijk om de boel bij te houden met een goede snelheid, op PHPFreakz (2000 members destijds) ging het ook gewoon snel terwijl er iedere dag best een hele bak threads bij kwamen. Ik heb de progger van dat forum toen om uitleg gevraagd maar dat antwoord heb ik destijds nooit gehad omdat hij het te druk had :(

Verwijderd

Verwijderd schreef op 09 augustus 2002 @ 18:29:
Ik hou het op een iets andere manier bij: als user inlogd, wordt de datetime in db opgeslagen, en de oude eerst in een cookie geset. die wordt in iedere thread met de datetime van de last-post vergeleken.
Als de last-post nieuwer is dan de cookie, wordt er aangegeven dat er nieuwe replys zijn. Als de eerste reactie in de thread niewer is, wordt de topic als nieuw gekenmerkt.

Deze status veranderd dan pas wanneer de user opnieuw inlogd, en niet per visit.
Niet helemaal zoals de topicstarter bedoelde, maar dit was zo voor mij de gemakkelijkste methode. (anders zat ik ook aan cookie/thread te denken)
dit is al aardig wat jah .. Ik kom er wel uit... thanks buddy

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 27-05 20:23
Ik zou het doen met timestamps
Timestamp in db
dan
timestamp > rood mapje
timestamp < blauw mapje
zoiets

per topic is al best veel werk, of je moet met cookies gaan werken. Sessies bied misschien ook een mogelijkheid.

Verwijderd

jah maar het moet dus niet zo zijn dat als je 2 weken niet aanwezig bent dat dan alles rood is ..

Verwijderd

Mijn methode is ook niet optimaal hoor, telkens als de index geladen wordt, wordt eerst de hele reactietabel doorzocht en vergeleken met de inlogdatum.
Dit is bij een klein forum nog wel te doen, maar op formaat ala GOT duurt 't laden van de index dan veels te lang...

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


Welke doet dat wel dan :?

Verwijderd

ACM schreef op 11 augustus 2002 @ 01:48:
[...]
Welke doet dat wel dan :?
zijne :D denk ik

  • Blorgg
  • Registratie: Juni 2001
  • Niet online
Wat ik doe is het volgende:
Elke keer dat een user een lijst met topics opvraagt in de tabel users een timestamp plaatsen.
Elk topic heeft in de db een veld waar de timestamp van de laast gemaakte post in staat.
Als een user dan een lijst met topics opvraagt worden er bv alleen de laatste 30 geselecteerd(titel, topic starter, laatst gemaakte post, etc, en de timestamp van de laatste post) Vervolgens dan met een while lusje even de timestamps van die threads vergelijken met de timestamp van wanneer de user als laatste iets opvroeg en de lijst weergeven.

Dit werkt gewoon snel en het opvragen van alle topics en het vergelijken kan met 2 queries.

*edit
Ik bedenk me net dat als ik het aantal subforums ga uitbreiden dit niet werkt. Oplossing is om dan een extra tabel te maken met daarin alle subfora, userid, en timestamp. Elke keer dat een user dan een subfora opvraagt wordt zn userid, de timestamp en het subforum_id in die tabel opgeslagen.
Vervolgens kan bij het opbouwen van het subforum weer eenvoudig gecontrolleerd worden wanneer een user dit als laatst bezocht heeft en kunnen alle laatste posts vergelegen worden.

[ Voor 30% gewijzigd door Blorgg op 03-02-2004 15:42 ]


  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 05-01 14:41
Ik werd op een gegeven moment nogal gestoord van die cookie based oplossingen aangezien ik op een aantal verschillende PCs werk. Ik heb toen maar de stoute schoenen aangetrokken en ben alles server side bij gaan houden. Ben daar tot nu toe er over te spreken :)

Ik heb een 'lastread' tabel toegevoegd met:
user_id
type
forum_id
topic_id
lasttime

Hierin wordt bijgehouden wanneer een user een topic voor het laatst heeft gezien. Type geeft aan of de user zelf gereageerd heeft in het topic.

Je krijgt dus per user 1 row per topic. Dat wordt idd een enorme berg topics maar alles dat ouder is dan 10 dagen wordt 1x per dag met een cronjob weggezout (kan je ook zonder cron doen natuurlijk).

Ik had verwacht dat het forum (phpBB2 met 3M berichten en zo'n 200-300 mensen online) niet blij zou zijn met de toevoeging maar het doet erg weinig met de load. Bijna niets zelfs behalve als je de lastread table flink laat groeien (b.v. 2 maanden data ipv 10 dagen). De lastread tabel is behoorlijk compact, allemaal fixed length records en past altijd volledig in het geheugen van je database server. Bij het maken van index.php of viewforum.php wordt er simpelweg gejoined met lastread. Het verschil in snelheid tussen wel/geen lastread is niet meetbaar klein. Valt me allemaal dus 100% mee. En echt ideaal dat het systeem exact weet welke topics je nou wel/niet hebt gezien, maakt niet uit vanaf waar je ingelogd ben.

phpBB 2.2 heeft een soortgelijk systeem (optioneel trouwens, je kan kiezen tussen client/serverside).

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:19

chem

Reist de wereld rond

dit topic is 2 jaar oud!

Klaar voor een nieuwe uitdaging.

Pagina: 1