Archief - PHP: nieuwe items markeren

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

fromalk

Legacy Member
hallo allemaal,

ik zit met een vrij basic vraagje me dunkt waar ik graag even jullie mening over had gehoord. Ik ben momenteel aan een schoolprojectje bezig en nu wou ik voor de nieuwsitems een markering willen toevoegen.

BV:
ik bezoek de site op 05/02 en er wordt op 12/02 een nieuw nieuwsitem toegevoegd, als ik nu dus op 13/02 bezoek wil ik dat dat item gemarkeerd staat.

Daarvoor dacht ik dus een cookie te gebruiken (elke user is guest, er zitten geen persoonlijke accounts in dus ik kan het niet per user opslaan) en in die cookie gewoon het tijdstip van laatste bezoek te bewaren, nu geeft dat volgens mij het probleem dat wanneer iemand refresht de cookie het huidige tijdstip krijgt en er dus geen markeringen zouden zijn. Daarbij komt ook dat ik alle items wil blijven markeren die niet gelezen zijn tot hij van de site weg surft (als hij dus een uur later terug komt, moeten al die oude, dus ook de niet gelezen items niet meer gemarkeerd zijn.

Hoe pakken jullie dit doorgaans aan?

zabulus

Legacy Member
Je kan toch controleren of die cookie reeds bestaat, als die bestaat lees je tijd uit en vergelijk je die met de huidige tijd & de tijdstippen van de nieuwsberichten.
Als de cookie nog niet bestaat, maak je er 1 aan met daarin de huidige tijd...
Je moet dan wel zorgen dat die cookie permanent opgeslagen blijft, maar dit kan je instellen (zie php manual)

fromalk

Legacy Member
Ja daar ben ik me van bewust, echter zit het euvel volgens mij in het vernieuwen van de cookie, hoe kan je er voor zorgen dat de cookie pas wordt aangepast wanneer de user de site verlaat?

mvg

Cyberkef

Legacy Member
Denk dat zoiets dan moet met javascript ipv php om die ene taak uit te voeren (je zegt het zelf: als de user de site verlaat =/=> serverside ^^). onClose of onUnload?

fromalk

Legacy Member
ik meende onExit te gebruiken maar dat zou de cookie ook doen veranderen bij bv het gaan van de ene pagina naar de andere ookal blijf je op onze site, zo begrijp ik het toch?

Cyberkef

Legacy Member
Ah, hmm... idd :)

Anders kan je mss in de cookie bijhouden welk de laatst gelezen nieuws-id is? En dan diegene markeren als nieuw die groter zijn dan?

fromalk

Legacy Member
Cyberkef zei:
Ah, hmm... idd :)

Anders kan je mss in de cookie bijhouden welk de laatst gelezen nieuws-id is? En dan diegene markeren als nieuw die groter zijn dan?

daar heb ik ook aan zitten denken maar het viel me andaag op dat bv op tweakers als je het meest recente nieuwsitem leest de oudere niet gelezen ook nog steeds als niet gelezen blijven staan

alsook;

er zijn 15 news items

iemand die item 5 uit de oude doos haalt zal alle items >5 als nieuw zien

JensDT42

Legacy Member
Misschien kan je dit oplossen met een sessie-variabele (of een tweede cookie, zal analoog werken).

Bij het openen van de pagina kijk je of deze sessie-variabele al bestaat. Zoja, doe niets. Zonee, wijs deze de waarde van de cookie toe. Nu kan je deze waarde gebruiken om te kijken of een artikel 'nieuw' is of niet, en kan je zonder problemen de waarde in de cookie updaten. De waarde in de sessie-variabele update je telkens bij het bekijken van een bericht, naar de tijd van dit bericht. Anders kan je natuurlijk niet weten of dit bericht gelezen is of niet.

Dit heeft natuurlijk wel als nadeel dat, indien er bijvoorbeeld 2 berichten zijn, een op 1/12 en een op 2/12 en de gebruiker eerst het nieuwste leest, het oude niet meer gemarkeerd zal zijn. Je kan dit oplossen door, in plaats van 1 sessie-variabele met de tijd, gewoon een array met de IDs van je berichten op te slaan. Bij het lezen van een bericht verwijder je dan dit ID uit de lijst. Natuurlijk moet je dan opletten voor performantie bij veel berichten, maar gezien de context lijkt me dit geen probleem!

Dit is natuurlijk geen ideale oplossing. Bovendien zullen alle berichten (zelfs de ongelezen) als 'gelezen' gemarkeerd worden bij het aflopen van de sessie (na een timeout, of bij het sluiten van de browser).

Misschien komt er nog iemand met een betere oplossing, maar dit kwam gewoon in me op.

Radiance

Legacy Member
Lijkt mij idd de beste methode.
Over een paar sessievars zou ik mij overigens ook geen zorgen maken ivm performance :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan