Kleine Vragen Topic #1

Gestart doorLennard4.284 reacties15.585 weergaven

4.285 berichten · pagina 171 van 286

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Spoiler tonen
Lennard (link):
Lennard schreef:
Ok, mijn uitleg. Zeg alsjeblieft achteraf niet dat je t laat zitten. emo
Je moet je forum even heel abstract in je hoofd hebben. Je hebt dan een tweetal soorten gelezen / ongelezen situaties:

1. In het topicoverzicht ("in dit topic staat >= 1 post die je nog niet gezien hebt")
2. In het forumoverzicht ("in dit forum staat een topic met >= 1 post die je nog niet gezien hebt")

Dan moet je je definities gaan maken: Wanneer is een post ongelezen? Wanneer is een topic ongelezen? Wanneer is een forum ongelezen? Datzelfde voor de ongelezen dingen. Met zulke ingewikkelde dingen kom je er gewoonweg niet uit als je maar "˜ergens begint en wat aanmoddert.
De definities:

1. Wanneer is een post gelezen?
Een post is ongelezen als de datum en tijdstip van plaatsing hoger is dan de datum en tijdstip van je laatste bezoek aan dit topic.
2. Wanneer is een topic ongelezen?
Een topic is ongelezen als de datum en tijdstip van de laatste post in het betreffende topic hoger is dan de datum en tijdstip van je laatste bezoek aan dit topic.
3. Wanneer is een forum ongelezen?
Een forum is ongelezen als de datum en tijdstip van de laatste post in een topic in het betreffende forum hoger is dan de datum en tijdstip van je laatste bezoek aan het bijbehorende topic in dit forum.

Maar dan ben je er nog niet. Je wilt niet iedere gebruiker verplichten om álle topics door te kijken, dus je wilt nog een tweetal linkjes; "Markeer alle fora als gelezen" en "Markeer alle topics als gelezen".
Die moet je dan ook nog in je definities verwerken:

1. Wanneer is een post gelezen?
Een post is ongelezen als de datum en tijdstip van plaatsing hoger is dan de datum en tijdstip van je laatste bezoek aan dit topic.
MAAR:
Een post is gelezen als de datum en tijdstip van de plaatsing lager is dan de datum en tijdstip van de laatste klik op "Markeer alle fora als gelezen", of als de datum en tijdstip van de plaatsing lager is dan de datum en tijdstip van de laatste klik op "Markeer alle topics als gelezen".
2. Wanneer is een topic ongelezen?
Een topic is ongelezen als de datum en tijdstip van de laatste post in het betreffende topic hoger is dan de datum en tijdstip van je laatste bezoek aan dit topic.
MAAR:
Een topic is gelezen als de datum en tijdstip van de plaatsing van de laatste post lager is dan de datum en tijdstip van de laatste klik op "Markeer alle fora als gelezen", of als de datum en tijdstip van de plaatsing lager is dan de datum en tijdstip van de laatste klik op "Markeer alle topics als gelezen".
3. Wanneer is een forum ongelezen?
Een forum is ongelezen als de datum en tijdstip van de laatste post in een topic in het betreffende forum hoger is dan de datum en tijdstip van je laatste bezoek aan het bijbehorende topic in dit forum.
MAAR:
Een forum is gelezen als de datum en tijdstip van de plaatsing van de laatste post lager is dan de datum en tijdstip van de laatste klik op "Markeer alle fora als gelezen".

Ja, t klinkt makkelijker dan het is. emo
Dan ga je heel voorzichtig een database opzet maken.
In die opzet moeten onder andere deze gegevens zitten:
- forum_berichten_alles_gemarkeerd (bevat alle kliks op "Markeer alle topics als gelezen")
o id van de gebruiker
o datum + tijdstip van de klik
o id van het forum
- forum_forums_alles_gemarkeerd (bevat alle kliks op "Markeer alle fora als gelezen")
o id van de gebruiker
o datum + tijdstip van de klik
- forum_berichten_gelezen (bevat alle views van de topics)
o id van de gebruiker
o id van het topic
o datum + tijdstip van de klik

Je moet je script en database(opzet) dus zo maken, dat hij alle bovengenoemde data op kan slaan en ook daadwerkelijk opslaat.

Ja, je krijgt dan enorm veel data, maar dat maakt als je de goede indices (meervoud van "˜index) hebt, niet uit; ik heb dit forum met een paar miljoen testposts geteld, en het werkte nog steeds zonder noemenswaardige vertragingen.
Welke indices je moet hebben moet je zelf maar uitzoeken, ik ga niet alles voorkauwen. yummie
Dan maak je een drietal bestanden; index.php (overzicht van alle fora), forum.php (overzicht van alle topics in dat forum), topic.php (overzicht van alle posts in dat topic).

Dan begint het echte kutwerk pas.
We beginnen met index.php.

Allereerst ga je de datum + tijdstip van de laatste klik op "Markeer alle fora als gelezen" ophalen. Je kunt dat in je fora-ophaal-query stoppen, maar dan wordt het alleen maar onoverzichtelijker en ingewikkelder (nog ingewikkelder).
Als je dat hebt gedaan haal je ook de datum + tijdstip op van de laatste klik op "Markeer alle topics als gelezen".
Als een van beide tijdstippen groter is dan het tijdstip van de laatste post in het betreffende forum, dan is het forum sowieso ongelezen, anders weet je het nog niet (je kunt immers ook gewoon alle posts gelezen hebben).
Let wel op dat de datum en tijd van de klik op "Markeer alle topics als gelezen" verschilt per forum; je kunt in het ene forum wel op die link hebben geklikt, maar op de andere niet. Je moet dus een leuke array maken met het forum id en de timestamp van je klik erop.

Dan maak je een query om alle fora en de bijbehorende de laatste posts op te halen. Hier op one2xs is het nog ingewikkelder, omdat een forum ook weer in een categorie kunt zitten. Maargoed, je haalt dus je data uit vier tabellen:
1. je forumtabel met alle fora erin
2. je poststabel om de laatste post van dat forum op te halen
3. je ledentabel om de auteur van de laatste post op te halen
4. je topictabel om de titel van de laatste post op te halen

Dat doe je dan, en je maakt een mooi loopje om al die fora op te halen en te doorlopen.
Tijd voor een stukje pseudocode:

[COLOR= #0000BB]<?php
$fora_gelezen_gemarkeerd[/COLOR]   [COLOR= #007700]=[/COLOR] [COLOR= #FF8000]// haal laatste datum + tijd van "markeer alle fora als gelezen";[/COLOR]
[COLOR= #0000BB]$topics_gelezen_gemarkeerd[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #FF8000]// haal laatste datum + tijd van "markeer alle topics als gelezen";[/COLOR]

[URL="http://www.php.net/while"]while[/URL][COLOR= #007700]([/COLOR]alle forums doorlopen[COLOR= #007700])
{[/COLOR]
    
    [COLOR= #0000BB]$gelezen[/COLOR] [COLOR= #007700]=[/COLOR] FALSE[COLOR= #007700];[/COLOR] [COLOR= #FF8000]// we gaan er vanuit dat elk forum ongelezen is, tenzij anders bevonden[/COLOR]
    
    [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$foruminfo[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]tijdstip_laatste_post[/COLOR][COLOR= #007700]] <[/COLOR] [COLOR= #0000BB]$fora_gelezen_gemarkeerd[/COLOR] [COLOR= #007700]||[/COLOR] [COLOR= #0000BB]$foruminfo[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]tijdstip_laatste_post[/COLOR][COLOR= #007700]] <[/COLOR] [COLOR= #0000BB]$topics_gelezen_gemarkeerd[/COLOR][COLOR= #007700])
    {[/COLOR]
        
        [COLOR= #0000BB]$gelezen[/COLOR] [COLOR= #007700]=[/COLOR] TRUE[COLOR= #007700];
        
    }[/COLOR]
    [URL="http://www.php.net/else"]else[/URL] [COLOR= #FF8000]// er is nu niet op "markeer alle ... als gelezen" geklikt:[/COLOR]
    [COLOR= #007700]{[/COLOR]
        
        [COLOR= #0000BB]$topics_gelezen[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #FF8000]// haal alle topic ids op waavoor geldt dat de datum van de laatste post van dat topic groter is dan de datum van je laatste bezoek aan dat topic[/COLOR]
        
        [URL="http://www.php.net/if"]if[/URL][COLOR= #007700]([/COLOR][URL="http://www.php.net/mysql_num_rows"]mysql_num_rows[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$topics_gelezen[/COLOR][COLOR= #007700]) ===[/COLOR] [COLOR= #0000BB]0[/COLOR][COLOR= #007700])[/COLOR]
            [COLOR= #0000BB]$gelezen[/COLOR] [COLOR= #007700]=[/COLOR] TRUE[COLOR= #007700];[/COLOR] [COLOR= #FF8000]// er zijn 0 ongelezen topic ids; dus forum is gelezen[/COLOR]
        
    [COLOR= #007700]}
    
}[/COLOR]
?>
[/spoiler]
Dat was alweer index.php"¦
Dan forum.php.

Hier hebben we alleen de datum + tijdstip nodig van de klik op "markeer alle topics als gelezen" waarbij het forum id van die klik gelijk is aan het forum id van het forum waar je nu in zit zegmaar.
Die haal je dus ook op.
Merk trouwens wel op dat je alleen de grootste datum hiervan wilt. Als mensen 10 keer op die link klikken, wil je de datum + tijdstip van de laatste klik; geen enkele andere.
De rest hiervan is een stuk makkelijker dan index.php.
Je haalt nu weer alle topics op uit je topictabel en doorloopt die weer (met een while).
Tijdens dat doorlopen ga je er weer van uit dat elk topic ongelezen is, tenzij je anders hebt geconstateerd.
Een topic is namelijk gelezen als een van de volgende voorwaarden geldt:
- De datum van de laatste post van dat topic is kleiner dan de datum van de klik op "markeer alle fora als gelezen"
- De datum van de laatste post van dat topic is kleiner dan de datum van de klik op "markeer alle topics als gelezen" voor dit betreffende forum
- De datum van de laatste post van dat topic is kleiner dan de datum van je laatste bezoek aan dit topic

In topic.php hoef je eigenlijk niets te doen; enkel een record opslaan dat het topic op dit moment is bekeken.

Als je het echt goed wilt doen sla je enkel de laatste post op die is bekeken (sommige bezoekers bezoeken enkel pagina 1 van een topic, terwijl het topic bijvoorbeeld 10 paginas heeft). Je gaat dan niet met datums vergelijken, maar met post ids. Je kunt dan ook een icoontje voor een post zetten om te laten blijken dat die gelezen danwel ongelezen is. Net als bij phpBB zegmaar. Je kunt een gebruiker dan ook direct doorsturen naar zijn laatst gelezen post. Maarja, dan wordt het weer een stuk moeilijker.

Anyway, dit is in grote (geloof me, hele grote cry) lijnen wat je moet doen.

Als je niet zo ervaren bent met PHP en MySQL dan raad ik je het echt serieus af. Het is leuk om het eens te proberen dan, maar baal niet te hard als het je niet lukt.

Je krijgt echt enorm lange queries die uit enorm veel verschillende tabellen data halen, dus de kans dat er "ergens" een fout zit is enorm groot. Dan moet je je hoofd koel houden en die fout die "ergens" zit, zien te ontdekken en op te lossen.
Zoals Ruben al zei; ik heb er vreselijk lang over gedaan om het 100 % werkend te krijgen, dus het is sowieso niet iets wat je in een vrij avondje effies in elkaar zet.

Ik heb dit hele verhaal in een word documentje zitten typen, dus als je liever een overzichtelijkere PDF hebt dan zeg je t maar.

Succes ermee. emo
Lennard.

Heb m nu niet doorgeelzen, dus geen idee of ik nog steeds achter die werkwijze sta en of het niet handiger kan (het forumsysteem hier heb ik al een paar keer veranderd), maar deze methode werkt iig.

Thx voor de goede basis biggrin het is me gelukt, ik heb het wel wat anders gedaan dan jij beschrijft.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Op welke wijze dan?
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Aarclay schreef:
Op welke wijze dan?
Ik heb het een aantal keer door gelezen en ik vermoed dat Lennie het op mijn manier bedoelde, wat ik begrijp uit de tekst van Lennard insert hij de datum en topic id bij een bezoek van een topic, ik update deze gewoon.

Dat soort kleine dingen. Ook een paar whiplash loopt van mij zelf aangepast, ik ben er tevreden over.
0
Jvdw

Lid

Berichten
4.321
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Toch kan het volgens mij veel eenvoudiger?
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Jvdw schreef:
Toch kan het volgens mij veel eenvoudiger?
Het is eenvoudig, hoe zou je het anders willen doen?
0
Berichten
6.485
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Sebastiaanh schreef:
Hoe kan ik het beste een simpele template parser maken? Ik heb dus zegmaar .tpl files met daarin dingen als {titel}, en dat wil ik weergeven.
Wat dacht jeel van mvc?
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Rogier schreef:
Eerdere citaten tonen
Sebastiaanh schreef:
Hoe kan ik het beste een simpele template parser maken? Ik heb dus zegmaar .tpl files met daarin dingen als {titel}, en dat wil ik weergeven.
Wat dacht jeel van mvc?
Kan ook zonder MCV.... Verder vindt ik je antwoord niet echt duidelijk.
0
Berichten
6.485
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Aarclay schreef:
Eerdere citaten tonen
Rogier schreef:
Eerdere citaten tonen
Sebastiaanh schreef:
Hoe kan ik het beste een simpele template parser maken? Ik heb dus zegmaar .tpl files met daarin dingen als {titel}, en dat wil ik weergeven.
Wat dacht jeel van mvc?
Kan ook zonder MCV.... Verder vindt ik je antwoord niet echt duidelijk.
Ja het kan ook zonder MVC. Waar zeg ik dat het met MVC moet?

MVC is sowieso handig als je met template parsers werkt omdat je dat makkelijk kan inbouwen. (hij parsed de view namelijk überhaupt al meestal).

Antwoord vond ik overigens duidelijk genoeg, jammer dat je het daar niet mee eens bent, maar voor meer info over MVC kan meneer zelf googlen.
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
Rogier schreef:
Eerdere citaten tonen
Aarclay schreef:
Eerdere citaten tonen
Rogier schreef:
Eerdere citaten tonen
Sebastiaanh schreef:
Hoe kan ik het beste een simpele template parser maken? Ik heb dus zegmaar .tpl files met daarin dingen als {titel}, en dat wil ik weergeven.
Wat dacht jeel van mvc?
Kan ook zonder MCV.... Verder vindt ik je antwoord niet echt duidelijk.
Ja het kan ook zonder MVC. Waar zeg ik dat het met MVC moet?

MVC is sowieso handig als je met template parsers werkt omdat je dat makkelijk kan inbouwen. (hij parsed de view namelijk überhaupt al meestal).

Antwoord vond ik overigens duidelijk genoeg, jammer dat je het daar niet mee eens bent, maar voor meer info over MVC kan meneer zelf googlen.
Nee, het antwoord is niet echt logisch....
MCV is niet een manier hoe je een templateparser bouwt, maar hoe je je script in verschillende lagen opdeelt (Model, Viewer en Controller). De template is daar een onderdeel van (View), maar daar hoeft niet per se een templateparser voor geschreven te worden. PHP zou zelf ook al voldoen.

Vreemd dat je eigenlijk over MCV begint...
0
Berichten
5.952
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ik weet niet precies hoe ik dit moet uitleggen maar ik zal het proberen.
Je ziet op mijn website dus tekst en een afbeelding.
Ik wil graag dat die tekst precies op het juiste moment afhakt zeg maar tot alles precies gelijk staat.
http://flogged.nl/test/
0
Berichten
8.649
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Sanderc schreef:
Hallo,

ik heb nu dit:
[COLOR= #0000BB]<?php
$ref[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$_SERVER[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]HTTP_REFERER[/COLOR][COLOR= #007700]];[/COLOR]

[URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$ref[/COLOR] [COLOR= #007700]!=[/COLOR] [COLOR= #DD0000]"http://www.google.com"[/COLOR][COLOR= #007700]){[/COLOR]
    
    [URL="http://www.php.net/exit"]exit[/URL][COLOR= #007700];
}[/COLOR]
[URL="http://www.php.net/else"]else[/URL]
[COLOR= #007700]{[/COLOR]
?>

//content
[COLOR= #0000BB]<?php[/COLOR]
[COLOR= #007700]}[/COLOR]
?>


Maar dus bij content staat al mijn HTML content etc. maar zo lukt het niet, en echoen is ook niet evident. HOe zouden jullie dit doen?

Dit script werkt perfect. Alleen doet het wss niet wat jij wilt.

Dit script stopt, indien je niet van http://www.google.com/ komt het script. Anders toont die //content. Hij zal dus altijd het script stoppen omdat je nooit meteen na het bezoeken van http://www.google.com ergens anders heen kunt gaan omdat je meteen word doorgelinkt naar http://www.google.com/BLABLA. Beter kijk je met preg_match naar (http://)(www.)google.(be/com/nl/...)(/random)
0
Berichten
1.579
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Vraagje, stel ik heb de titel Ed Sheeran - Give Me Love. Hoe kan ik er voor zorgen dat ik het apart krijg

$artiest = Ed Sheeran
$nummer = Give Me Love

Met explode gaat ik dit niet voor elkaar krijgen weten jullie wat?
0
Berichten
11.263
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Anton,

jij zei, dat als je zoomde, dit faalde.
http://sander.vanmarijn.nl/BurOS

Maar kan je me dan ook uitleggen en tips geven hoe ik zorg dat het wel werkt?
0
Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Robertt schreef:
Vraagje, stel ik heb de titel Ed Sheeran - Give Me Love. Hoe kan ik er voor zorgen dat ik het apart krijg

$artiest = Ed Sheeran
$nummer = Give Me Love

Met explode gaat ik dit niet voor elkaar krijgen weten jullie wat?
[COLOR= #0000BB]<?php
$song[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"Ed Sheeran - Give Me Love"[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$info[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/explode"]explode[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"-"[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$song[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$info[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]];[/COLOR] [COLOR= #FF8000]// artiest[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$info[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]1[/COLOR][COLOR= #007700]];[/COLOR] [COLOR= #FF8000]// nummer[/COLOR]

?>


getest en het werkt
0
Berichten
1.579
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Eerdere citaten tonen
Robertt schreef:
Vraagje, stel ik heb de titel Ed Sheeran - Give Me Love. Hoe kan ik er voor zorgen dat ik het apart krijg
$artiest = Ed Sheeran
$nummer = Give Me Love

Met explode gaat ik dit niet voor elkaar krijgen weten jullie wat?

[COLOR= #0000BB]<?php
$song[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #DD0000]"Ed Sheeran - Give Me Love"[/COLOR][COLOR= #007700];[/COLOR]
[COLOR= #0000BB]$info[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/explode"]explode[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"-"[/COLOR][COLOR= #007700],[/COLOR] [COLOR= #0000BB]$song[/COLOR][COLOR= #007700]);[/COLOR]

[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$info[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]0[/COLOR][COLOR= #007700]];[/COLOR] [COLOR= #FF8000]// artiest[/COLOR]
[URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$info[/COLOR][COLOR= #007700][[/COLOR][COLOR= #0000BB]1[/COLOR][COLOR= #007700]];[/COLOR] [COLOR= #FF8000]// nummer[/COLOR]

?>


getest en het werkt
Owja tuurlijk. Zat veel moeilijker te denken haha, bedankt man!
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren