Forum - topic bezocht ja/nee?
Momenteel heb ik een forum gebouwd met de basis functies:
- categorien overzicht
- topics
- posts
Nu wil ik dus in het topic overzicht kunnen zien of ik een post al gelezen heb ja of nee (is deze nieuw?)
Nu had ik het volgende bedacht:
Ik schrijf een cookje weg met de volledige tijds notatie (dus datum + tijd + milliseconden)
Alles wat later is dan de tijd, dat is een new topic.
Mijn vraag is... wanneer moet ik deze tijd wegschrijven? als ik alle posts van het topic gelezen heb? (hoe is dat te doen? stel dat het er 2 zijn?)
Of moet ik nagaan wat elke laatste post is van elke topic, om vervolgens daarop te baseseren of ik dit gelezen heb? (opzich logisch)
dat zou kunnen, maar wanneer schrijf ik de tijd weg? wat is nu handig? Want als ik de 1 gelezen heb, wil niet zeggen dat ik de ander gelezen heb)
Gezocht in de tutorials, maar nergens wordt dit behandeld zo ver ik kan zoeken..
Mij lijkt het handigste dat als ik op de pagina kom en mijn sessie gestart is dat er in de database nagegaan wordt wanneer ik voor het laatst ingelogd heb?
Gewijzigd op 01/01/1970 01:00:00 door Leroy
Ik zet in de cookie welke pagina's zijn gelezen (eigenlijk gewoon 10 of 20 of 28 enzo)... (op zijn geweest) Dan kun je het verschil in berichten berekenen en dan kan je 'vertellen' of er al een nieuw bericht op is.
Edit:
Schreef sessie ipv cookie :P
Schreef sessie ipv cookie :P
Gewijzigd op 01/01/1970 01:00:00 door Mark L
Users in mijn forum kunnen zelf instellen hoeveel per pagina ze willen, dus dat is erg lastig :S
leroy schreef op 09.09.2007 10:49:
10 20 en 28 zijn dan pagina nummers?
Users in mijn forum kunnen zelf instellen hoeveel per pagina ze willen, dus dat is erg lastig :S
Users in mijn forum kunnen zelf instellen hoeveel per pagina ze willen, dus dat is erg lastig :S
Nee.. ik heb daarom 10, 20 en 28 als berichten die gelezen zijn. Enige nadeel: Als je meteen bij het einde begint.
Op zich zou je ook elke id van een post die gelezen is in een array van een cookie zetten. Dan kun je zien welke nog NIET is gelezen (precies) en hoeveel nog niet)
dan zou een 'catch up' button prettiger werken denk ik..
maak een tabel user_gelezen waarin je het user_id en het topic_id zet. Komt deze combi voor in je tabel dan is het gelezen anders niet.
Maar stel er is een nieuwe post op gedaan? kun je helemaal gaan uitzoeken welke users hem dan weer niet gelezen hebben?
Is het op basis van tijd niet veel makkelijker?
Ik gebruik de volgende query om alle topics met een bepaald forumID op te halen;
Code (php)
1
2
3
2
3
<?php
$query = "SELECT p.userID, u.name, count(p.postID) as amount, max(DATE_FORMAT( p.datetime, '%e %M %Y, %H:%i' )) as newDatetime, t.topicID, t.subject, t.close FROM ".$prefix."topics as t, ".$prefix."posts as p, ".$prefix."users as u WHERE t.topicID = p.topicID AND p.userID = u.userID AND t.forumID = ".mysql_real_escape_string($get['forumid'])." AND t.deleted = 0 GROUP BY t.topicID ORDER BY datetime";
?>
$query = "SELECT p.userID, u.name, count(p.postID) as amount, max(DATE_FORMAT( p.datetime, '%e %M %Y, %H:%i' )) as newDatetime, t.topicID, t.subject, t.close FROM ".$prefix."topics as t, ".$prefix."posts as p, ".$prefix."users as u WHERE t.topicID = p.topicID AND p.userID = u.userID AND t.forumID = ".mysql_real_escape_string($get['forumid'])." AND t.deleted = 0 GROUP BY t.topicID ORDER BY datetime";
?>
Door de group by in combinatie met de max() krijg ik keurig de tijd/datum terug van de laatste reactie.
Als ik nu na het 'lezen/openen' van een topic een query maak met iets als INSERT INTO tabel ('userID','topicID','datetime') VALUES (1,1,NOW()) word het erg eenvoudig om te kijken of iemand een topic al heeft bekeken en of daar een nieuwe reactie in is gekomen.
Echter, omdat ik alles met 1 query wil doen moet ik ff kijken naar de precieze hoe en wat...
Houdt me op de hoogte als je wil...
Zelf ga ik een stoeien met last_login time.
Het moet vrij makkelijk te doen zijn lijkt me, alleen het punt is... "waneer?"
hier), punt is echter dat je het dan niet per topic kan doen.
Last login time zou ik niet doen, kan ik ook doen want dat staat in mijn sessie database (zie voor mijn reactie je gaat gewoon na wat de laatste post in het topic is, vervolgens leg je de datum uit de cookie en de datum uit de post naast elkaar?
Als ik dan op F5 druk, of als ik een topic gelezen heb en ik ga terug naar het overzicht... dan heb ik _alle_ topics gelijk gelezen volgens jouw systeem.
niet als je alleen de cookie inteld op moment dat je sessie gemaakt wordt?
Dat betekend dat, als ik een topic gelezen heb in jouw systeem en ik ga terug... dat topic nogsteeds op 'ongelezen' staat ;).
Zover had ik het nog niet bekeken...
Pff, ik ga er maar eens goed over nadenken hoe ik dat erin ga stampen...
Wellicht de phpbb code maar eens uitpluizen om te kijken hoe zij dat gedaan hebben.
ik sla alleen op wanneer de gebruiker voor het laats is ingelogd en dat vergelijk ik met de plaatsings datum/tijd van de topics...
simpel en best doeltreffend eigenlijk :)