gelezen / ongelezen iconen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

GI ACE

GI ACE

11/10/2009 13:25:00
Quote Anchor link
Hoe werkt de structuur bij een forum (like phpBB of iets) met iconen bij topics dat ie veranderd dat wanneer je het topic heb gelezen en als er een nieuw topic komt wat je nog niet hebt gelezen dat het icoon dan veranderd naar ongelezen.
 
PHP hulp

PHP hulp

08/05/2024 06:56:16
 
Steen

steen

11/10/2009 14:15:00
Quote Anchor link
Misschien kun je je vraag wat duidelijker stellen, maar volgens mij wil je dit weten:

Die icon's staan in een map als bijvoorbeeld 'gelezen.png' en 'ongelezen.png' (en dan nog een X aantal meer). In de database staat een veld 'gelezen' als boolean. Dan komt er een stukje code wat lijkt op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if($row['gelezen'])
{

$img = 'gelezen.png';
}

else
{
$img = 'ongelezen.png';
}

echo '<img src="images/'.$img.'" alt="" />';
?>


Dit was wel erg simpel trouwens.
 
GaMer B

GaMer B

11/10/2009 14:25:00
Quote Anchor link
Of korter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$img
= ($row['gelezen']) ? 'gelezen.png' : 'ongelezen.png';

echo '<img src="images/' . $img . '" alt="" />';[/code]
 
Jesper Diovo

Jesper Diovo

11/10/2009 15:00:00
Quote Anchor link
Of nog korter:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo '<img src="images/' . (($row['gelezen']) ? 'gelezen.png' : 'ongelezen.png') . '" alt="" />';
?>
 
Mark L

Mark L

11/10/2009 15:21:00
Quote Anchor link
Nee, ik denk dat hij bedoelt hoe PHP weet of je iets al hebt gelezen of niet.

Nou, hier zijn cookies handig voor. Je kunt bijvoorbeeld het id van een gelezen topic opslaan en daarbij ook het id van de laatste post van dat topic. Als de laatste post hetzelfde id heeft, dan heb je hem gelezen. Zo niet? Dan is het ongelezen.
Staat het hele topic-id niet in de cookie? Dan heb je hem nog niet gelezen.

Opslaan wat je gelezen hebt. Dat is het principe.
 
GaMer B

GaMer B

11/10/2009 16:29:00
Quote Anchor link
@Miloan, ik denk dat je hier geen cookies voor moet gaan gebruiken. Een database volstaat wel.

Overigens denk ik niet dat je een boolean voor gelezen/niet gelezen moet opslaan. Ik denk eerder dat je een waarde zoals 'last viewed' of zoiets moet opslaan. Zodra er weer berichten zijn die voorbij 'last viewed' gaan, dan weer ongelezen maken.
 
Mark L

Mark L

11/10/2009 17:45:00
Quote Anchor link
@ GaMer13,

Ja, een database kan, als mensen ingelogd moeten zijn, zo niet zou dit op ip moeten en dan vind ik zelf cookies handiger. Over 'last viewed' gesproken: Dat bedoelde ik, alleen ik heb het blijkbaar niet goed omschreven.
Ik bedoelde het zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
COOKIE {
  [2] => 12,
  [23] => 92
}


Bij topic-id 2 is het laatste bericht-id 12 (niet bericht 12, het kan zijn dat er maar 1 bericht is, maar dat bericht heeft dan id 12)
Bij topic-id 23 is dit bericht-id 92.
 
GI ACE

GI ACE

11/10/2009 18:57:00
Quote Anchor link
Wat is nu het beste? Met database? Met cookies? Je moet wel inloggen voordat je berichten kunt plaatsen in ieder geval. =O

Een cookie dat dat topic op 'gelezen' staat en als iemand post dat dat cookie weer veranderd wordt in ongelezen ofzoiets? Ik heb echt geen idee hoe dat ten werk gaat. Da's ook het enige wat ik me al hardstikke lang zit af te vragen.

Miloan had trouwens gelijk. ("Nee, ik denk dat hij bedoelt hoe PHP weet of je iets al hebt gelezen of niet.").
Gewijzigd op 01/01/1970 01:00:00 door GI ACE
 
GI ACE

GI ACE

12/10/2009 17:33:00
Quote Anchor link
K... heb dus gehoord van een vriend dat het met een database vrijwel onmogelijk is... Maar ik weet nog niks van cookies af, ze zetten, welke informatie en hoe je 't opslaat, en wat de structuur ervan is...

En ook dat ie het laatste ID nacheckt in dat topic, maar dat ie dat wel weer vernieuwd als een nieuw iemand erin post zodat die ook weer op ONGELEZEN moet gaan staan... =O
 
Mark L

Mark L

12/10/2009 23:28:00
Quote Anchor link
Nee, nee, nee, je ziet het helemaal verkeerd.

Cookies zijn kleine stukjes data, gegevens. Je slaat gegevens op op de computer van de gebruiker.
Dit doe je ook bij een database, alleen DAN staat het op de server, houd je het centraal.

Op cookies is minder controle dan op een database, omdat de cookies gewijzigd kunnen worden op de computer van de gebruiker. Echter heeft dit geen invloed op belangrijke systemen, alleen dat iets wat als 'gelezen' is opgeslagen, als 'ongelezen' wordt getoond. Wat maakt het uit? Schuld van degene die het bewerkt heeft.

Cookies staan dus op een computer en deze worden bij ELKE pagina die opgevraagd wordt meegestuurd. Bij een database zou je de gebruiker eerst nog moeten herkennen.

De structuur van het opslaan van gelezen/ongelezen is hetzelfde:

In geval van een forum (kan ook bij gastenboek en bij veel andere dingen ook, maar bij een forum is het het uitgebreidst, doordat je meerdere topics hebt):
Persoon A gaat naar een topic, met als topic-ID 20. We willen dat de volgende keer dat een pagina geladen word, de computer weet: Persoon A is op topic 20 geweest.
Dus we slaan op dat Persoon A in topic 20 is geweest.
Bij cookies kun je gewoon een cookie zetten, waarin staat topic 20, bij een database moet je topic 20 en iets waar je de gebruiker aan herkent (een gebruikersnaam of ip o.id.)
Het script kijkt welke topics geopend zijn in het verleden en deze markeerd hij als gelezen. (dit is immers in ofwel cookies, ofwel database opgeslagen)

Maar nu, Persoon B opent topic-ID 20 en die schrijft een nieuw bericht erin. Er is nu een topic-bericht en een reactie erop. Persoon A heeft de reactie van persoon B nog niet gelezen. Het bericht heeft een bericht-ID van 35.
Als persoon A nu het forum opent, staat er dat hij het topic gelezen heeft, hoewel er een nieuw bericht is gepost. Dit komt omdat er alleen gecontroleerd word of in het verleden het bericht geopend is.
Nu komt hier de truc: We slaan op welke post BOVENAAN de pagina staat: Bij persoon A zou dat ID 20 zijn, bij persoon B ID 35.
In het huidige topic is het ID 35. Dit komt niet overeen met het ID dat bij persoon A staat. Dus persoon A heeft nog een gedeelte van het topic niet gelezen!

Nu ik dit aan het typen ben, denk ik ook opeens dat je dit met tijd kunt doen: Sla op wat de laatste keer is dat de gebruiker het topic geopend heeft. Als de LAATSTE post dan later is dan de tijd die opgeslagen is, dan weet je ook dat er een nieuwe post is.

Ik hoop dat je het nu snapt. Ik heb het zo uitgebreid mogelijk geprobeerd te verwoorden.

Edit:
Onthoudt dus: De gegevens zeggen niet of het de laatste post is of niet. Als er een nieuwe post gepost word, dan veranderen deze gegevens niet. Echter kun je wel AFLEIDEN uit de gegevens of de laatste post al gelezen is. Elke keer als de gebruiker de pagina op komt, moeten de gegevens geüpdate worden!

Miloan
Gewijzigd op 01/01/1970 01:00:00 door Mark L
 
GI ACE

GI ACE

12/11/2009 13:47:00
Quote Anchor link
Maar... cookies verlopen toch na 1 jaar ofzo?
 
Mark L

Mark L

12/11/2009 16:52:00
Quote Anchor link
je kunt cookies zetten voor zolang als je wilt.
1 seconde, 1 minuut, 1 uur, 1 dag, 1 week, 1 maand, 1 jaar, 1 decennia, ...
Als je gewoon een tijd van verloop zet in de verre toekomst (bijvoorbeeld 10 jaar later..) dan verloopt de sessie pas na 10 jaar, tenzij deze gewijzigd wordt door ofwel de server ofwel de gebruiker.
 
GI ACE

GI ACE

12/11/2009 17:58:00
Quote Anchor link
Maar stel je voor, je hebt eindelijk een goed systeem gemaakt wat werkt, en diegene verwijderd zijn cookies in zijn web-browser, dan staan alle topics toch weer gewoon op ongelezen?
 
Michael -

Michael -

12/11/2009 19:27:00
Quote Anchor link
Giace schreef op 12.11.2009 17:58:
Maar stel je voor, je hebt eindelijk een goed systeem gemaakt wat werkt, en diegene verwijderd zijn cookies in zijn web-browser, dan staan alle topics toch weer gewoon op ongelezen?

Voor die gebruiker dan wel ja. Daarom moet je ook gewoon met een database werken. Gebruiker moet toch al inloggen dus ik neem aan dat ie een ID heeft. Die ID sla je ergens op met de topic en een datum van laatst geplaatst bericht ofzo. En dan check je gewoon er een nieuw bericht is geplaatst waarvan de datum nieuwer is als ie in de database. Succes.
 
GI ACE

GI ACE

12/11/2009 19:49:00
Quote Anchor link
Okee, dankje. Ga ik mee aan de slag. Wanneer 'ie data insert van een topic, staat het op ongelezen. Maar hoe script ik dat hij alle info uit een board insert?
(Daarvoor moet ie dus ook meerdere queries uitvoeren in 1 code).

edit: wat ik probeer duidelijk te maken is dat ik natuurlijk wel een 'markeer board als gelezen' en 'markeer alle boards als gelezen' functie wil maken. ;)
Gewijzigd op 01/01/1970 01:00:00 door GI ACE
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.