Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [PHP] gelezen berichten op forum (https://forum.scholieren.com/showthread.php?t=1218852)

Lil' Stef 02-07-2005 14:19

[PHP] gelezen berichten op forum
 
Hallo allemaal,

Ik wil nu een vrij uitgebreid forum maken. Ik heb al meerdere standaard prikborden gemaakt, maar verder lukt alles wel, alleen wil ik, dat hij het aangeeft als iemand een topic gelezen heeft. Ik dacht om gewoon alle id's van de topics op te slaan, bij het user id. Maar dan heb ik duizenden velden nodig. Bij PHPBB gebuiken ze cookies. Maar dat snap echt niet.

Weet iemand hoe je dat moet doen??

Alvast bedankt,

Stefan

Dr HenDre 02-07-2005 14:31

Simpel, je maakt een cookie met datum en tijd (als timestamp evt) van de laatste bezoek van een bezoeker. Op het moment dat diegene weer op het forum komt vergelijk je dat met de laatste post in een topic. Is de timestamp van t topic groter dan die uit de cookie dan staan er niet gelezen gebrichten in een topic. Zoniet dan zijn alle berichten gelezen

Harrie 02-07-2005 18:38

Citaat:

Dr HenDre schreef op 02-07-2005 @ 15:31 :
Simpel, je maakt een cookie met datum en tijd (als timestamp evt) van de laatste bezoek van een bezoeker. Op het moment dat diegene weer op het forum komt vergelijk je dat met de laatste post in een topic. Is de timestamp van t topic groter dan die uit de cookie dan staan er niet gelezen gebrichten in een topic. Zoniet dan zijn alle berichten gelezen
Eigenlijk klopt het niet helemaal, maar het is wel de meest gebruikelijke manier. Er wordt namelijk niet van elk topic nagegaan of hij werkelijk is gelezen of niet, maar of hij nieuw is of niet.

Dr HenDre 03-07-2005 10:13

Citaat:

Harrie schreef op 02-07-2005 @ 19:38 :
Eigenlijk klopt het niet helemaal, maar het is wel de meest gebruikelijke manier. Er wordt namelijk niet van elk topic nagegaan of hij werkelijk is gelezen of niet, maar of hij nieuw is of niet.
klopt ja, als je echt van alle topic bij wil houden moet je echt bij elke userid de topicid's opslaan die geopend zijn, en als er gepost word moeten weer alle topicid's verwijderd worden uit t lijst van gelezen topics. Zodra ze weer bekeken worden weer toegevoegd enz enz
maar dit kost wel veel resources...

ILUsion 04-07-2005 23:30

Citaat:

Lil' Stef schreef op 02-07-2005 @ 15:19 :
Hallo allemaal,

Ik wil nu een vrij uitgebreid forum maken. Ik heb al meerdere standaard prikborden gemaakt, maar verder lukt alles wel, alleen wil ik, dat hij het aangeeft als iemand een topic gelezen heeft. Ik dacht om gewoon alle id's van de topics op te slaan, bij het user id. Maar dan heb ik duizenden velden nodig. Bij PHPBB gebuiken ze cookies. Maar dat snap echt niet.

Weet iemand hoe je dat moet doen??

Alvast bedankt,

Stefan

Inderdaad met cookies is het het makkelijkste en veruit het beste voor je prestaties.

Niets van duizenden velden, want dan raadpleeg je beter een boek 'relationele databases voor dummies' of iets dergelijks. Het is totaal onmogelijk om voor elk topic een veld aan te maken, want je zou dan elke keer een SQL-UPDATE-commando moete nsturen en dat doe je juist beter niet geautomatiseerd, lijkt me. Als je echt perfect zou willen bijhouden welk topic gelezen is, moet je met wat ik een linktabel noem werken tussen je users en je topics.

Een forum heeft meestal een tabel topics (of posts eventueel, afhankelijk van de structuur) en dan heb je nog je tabel users. Nu is het feit dat één user meerdere topics kan gelezen hebben en één topic kan door meerdere users gelezen geweest zijn. Dat is dus een veel-op-veel-relatie en dan heb je een extra tabel nodig: een linktabel. In zo'n tabel moet je enkel de primaire sleutel van beide tabellen die je wilt linken opnemen.
Code:

T: users
  > userID (primaire sleutel)
  > ...

T: topics
  > topicID (primaire sleutel)
  > ...

T: user_topic (linktabel)
  > userID
  > topicID

Bij het opvragen van de topics zou je dan kunnen nakijken of er al een combinatie userID-topicID die overeenkomt (userID komt van de huidige gebruiker, topicID van het topic dat opgevraagd wordt) en als dat niet het geval is, maak je een aan; Zo kun je dus bepalen of een topic gelezen geweest is als je het echt persé wilt doen met een database (en onafhankelijk van waar iemand inlogt).

Wat Dr. Hendre zegt klopt ook, dat valt eventueel op te lossen met een timestamp in de tabel user_topic en die te vergelijken met die van de laatste reply in het topic. Maar inderdaad zijn het zeer veel resources voor zo'n amper gebruikte functie. Het is volgens mij handiger om weer te geven of iemand gereageerd heeft in een topic. In je browser wordt toch meestal aangeklikte links in een andere kleur weergegeven (kan ook met CSS aangepast worden naar je eigen keuze) zodat je kan zien of je het topic gelezen hebt. En daar verspil je server-side geen resources aan :)


Alle tijden zijn GMT +1. Het is nu 01:43.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.