[PHP] MVC, dynamische paginas, hoe?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Situatie:
Ben ondertussen alweer een tijdje bezig met een MVC systeem op te zetten voor mijn website.
Hoedat het momenteel in zijn werk gaat (globaal)

-1 point of entry index.php
-router kijkt naar url en verwijst door naar de juiste controller (allen afgeleid van controller_base.php) bv user/register.php
-controller stuurt view aan en voila.

Het probleem:
Tot zover werkt alles naar mijn wens, voor statische pagina's werkt het perfect, nu ben ik echter op een punt aanbeland dat ik dynamisch pagina's uit mijn db wil hopen en displayen.

Hoe kan ik hiervoor het beste te werk gaan? Waar moet ik dit implementeren binnen mijn MVC systeem. In mijn router?

Het is de bedoeling dat wanneer je gaat naar www.site.com/paginaNaam je die pagina te zien krijgt die uit de database komt. Momenteel is het zo dat je een 404 krijgt omdat mijn router zoekt naar de controller 'paginaNaam.php'.

Mijn idee:
Een file toevoegen startup.php die alle pagina's uit de db haalt, van elke pagina een object maakt, deze objecten in een array.
Vervolgens in de router kijken of de gevraagde url mogelijk een pagina is (de eerder aangemaakte array met pagina objecten doorlopen).
Nu ben ik bang dat wanneer ik 300 pagina's heb (zover zal het waarschijnlijk niet komen maar toch) Dit enorm lang gaat duren...

alvast een antwoord op de vraag waarom ik dit doe, omdat ik ervan wil leren en het hopelijk kan ;)

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • Calamor
  • Registratie: Oktober 2004
  • Laatst online: 16:30
voor apache heb je wel iets dat van een url bv : www.site.nl/var1/var2/ omzet naar www.site.nl/index.php?var=var1+var=var2 ( als het goed is ziet het er zo uit ) weet niet wat de naam voor dat is. wordt ook wel meerdere keren op forums gesproken.

edit. Kijk eens naar mod_rewrite

[ Voor 6% gewijzigd door Calamor op 14-07-2008 09:35 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Kan je niet de router zo maken dat als hij een 404 zou generen, hij naar een default controller toe redirect?

Deze default controller kijkt dan naar de gevraagde pagina en haalt de content uit de database aan de hand van de gevraagde pagina.

Of denk ik nu te kort door de bocht?

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wat versta je eigenlijk precies onder die 'dynamische' pagina's? En waarom zouden deze niet via het 'standaard' mvc truukje kunnen?

Je idee lijkt me alvast eentje om stellig af te raden. Bedenk dat bij php bij ieder request die hele lijst opnieuw opgehaald en in objecten omgezet moet worden om vervolgens te kijken of er 1 voorkomt.

Los van wat je doel nu eigenlijk is en enkel kijkend naar je voorgestelde oplossing lijkt het me veel handiger om je controler gewoon normaal te doorlopen. Pas als je bij het 404 moment aankomt ga je in de database kijken of die pagina misschien daar voorkomt. Aan de hand daarvan geef je die pagina, of alsnog een 404 terug. Het voordeel is dat je nu dat extra werk alleen doet in de gevallen dat je het ook echt nodig hebt.

Mijn eerste vraag blijft echter staan. Wat is volgens jou het verschil tussen een statische en dynamische pagina?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Bedankt voor de reacties,
@Calamor, niet helemaal wat ik zoek binnen mijn probleem, maar bedankt.
@Lucard en Janoz, hm dit is misschien wel de oplossing inderdaad.
Janoz schreef op maandag 14 juli 2008 @ 09:36:
Wat versta je eigenlijk precies onder die 'dynamische' pagina's? En waarom zouden deze niet via het 'standaard' mvc truukje kunnen?
...
Mijn eerste vraag blijft echter staan. Wat is volgens jou het verschil tussen een statische en dynamische pagina?
Soms vergeet ik dat wat in mijn gedachten logisch is omdat ik het zelf heb bedacht, dit bij anderen niet is :) .

Maar dus onder 'statische paginas' zie ik paginas die altijd gaan terug komen in websites. (een pagina om te registreren, registratie bevestigen, wachtwoord vergeten,...)
Bv mijn user/register gedeelte, statisch omdat de view die hier bij hoort enkel een html formulier bevat waar mensen zich kunnen registreren. Verder hoeft er op deze pagina geen tekst uit de database te komen (behalve dat het menu en dergelijke...)
Hetzelfde met user/lostpassword,...

In tegenstelling tot bijvoorbeeld een pagina 'overmij' waar ik enkel een view 'pagina' voor zal maken en alle content uit de database zal komen. edit: (dus pagina's die ik kan aanmaken, wijzigen, verwijderen,...)

Ik hoop dat het zo iets duidelijker is :)

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Janoz schreef op maandag 14 juli 2008 @ 09:36:
Mijn eerste vraag blijft echter staan. Wat is volgens jou het verschil tussen een statische en dynamische pagina?
Ik denk dat hij bedoelt dat een gebruiker in een CMS zelf een nieuwe pagina kan aanmaken met eigen content die vervolgens moet worden meegenomen in menu's ed.

Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Cartman! schreef op maandag 14 juli 2008 @ 09:46:
[...]

Ik denk dat hij bedoelt dat een gebruiker in een CMS zelf een nieuwe pagina kan aanmaken met eigen content
Ja dat is het inderdaad :9 (net hierboven een hele uitleg gedaan die nog niet half zo duidelijk is als dit :+ )

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik zie niet in waarom zo'n pagina speciaal is en daarom anders behandeld zou moeten worden. Het past toch precies in het hele stramien? Maak gewoon een controler voor 'content' waarbij een groot deel van de view wordt gevuld met 1 niet ge-escaped database veld. Ik neem tenminste aan dat je op die pagina's ook weer de standaard header en footer wilt laten zien die in je view ge-implementeerd is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • bille
  • Registratie: Mei 2000
  • Laatst online: 16-08 14:37

bille

Don't call me Buff

wat je dus eigenlijk wilt is dat www.site.com/naam terecht komt op www.site.com/controller.php?id=naam. Enige wat je niet wilt is dat de gebruiker dat ziet. Daar heb je een handigheidje voor en dat heet url rewrite. en dat kan je doen in een htaccess script (zie hier)

Ultra Pilammo 6666Mhz AMD, 4251Mbit/s RAM, Gefors V6666 MegaTurbo, 43" TFS, Ultra 80Gig Firewire netwerkkaart en 5D geluid met 66 speakers in 5 dimensies


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

bille schreef op maandag 14 juli 2008 @ 10:01:
wat je dus eigenlijk wilt is dat www.site.com/naam terecht komt op www.site.com/controller.php?id=naam. Enige wat je niet wilt is dat de gebruiker dat ziet. Daar heb je een handigheidje voor en dat heet url rewrite. en dat kan je doen in een htaccess script (zie hier)
Dit zou op zich wel werken, maar dan val je wel uit de MVC framework die hij nu al heeft opgezet. En ik denk niet dat hij dat wil.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Inderdaad, www.site.com/naam zou moeten worden door gestuurd naar controllers/content.php waar ik dan vervolgens de juiste pagina oproep.

bedankt voor het meedenken allemaal, (een betere planning vooraf was misschien handig geweest ;) )

Kan natuurlijk altijd nog gewoon www.site.com/content/naam doen maar dit is natuurlijk weer iets minder mooi. :)

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Normaal gesproken wordt een controller aan (een deel van) het pad gekoppeld, bijvoorbeeld via 'virtuele' directories. Echter hebben de meeste mvc frameworks een 'default' controller als het pad zelf niet bekend is.

In jouw geval zou je de aanname kunnen doen dat als de default controller wordt aangeroepen, de 'statische' routes (zoals user/registratie.php) niet matchen. Vervolgens laat je de default controller de user generated content opzoeken en als dat ook geen resultaten oplevert kun je alsnog een 404 pagina tonen.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Sjoerd
  • Registratie: December 2003
  • Niet online
@Niemand_Anders zo heb ik het nu uitgewerkt, works like a charm :*)

voor de volledigheid nog een stukje code hoe mijn controller index (default) er nu uitziet:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public function index() {
            $page = new pages();
            
            if (isset($_GET['title'])) {
                $page -> title = text::makeSafe($_GET['title']);
            } else {
                // Get the site default page
                $settings = new settings;
                $page -> id = $settings -> websiteDefaultPageID;
            }
            // Get page data
            $page -> getData();
            
            if (!empty($page -> id)) {
                // Get the page template
                $template = new templates();
                $template -> id = $page -> templateID;
                $template -> getData();
                // Get the page picture
                $pagePic = new pagePictures();
                $pagePic -> id = $page -> id;
                $pagePic -> getData();
                // Assign
                registry::get('template')->assign('title', $page -> title);
                registry::get('template')->assign('pagePicture', $pagePic -> file);
                registry::get('template')->assign('content', $page -> content);
                registry::get('template')->display($template -> file);
            } else {
                // Page or controller not found so display 404
                $this -> error404();
            }
}


Erg eenvoudig dus gelukkig.

Ondertussen rest mij nu nog 1 vraag, hoe krijg je het net als hier op tweakers geregelt dat je een url als www.tweakers.net/naam-onderwerp-vannieuwsbericht.html krijgt? gewoon 'vals spelen' en alles binnenin je website laten linken naar titel van mijn pagina + ".html" en spaties vervangen door "-"?
En dan vervolgens dit later weer in de code verwijderen zodat je weer je titel over houdt om mee te werken? :)

Ben weer een gelukkig man op deze zonnige dag ;)

Modelbouw - Alles over modelbouw, van RC tot diorama


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Wat tweakers doet is de complete url na de laatste / negeren. Het 'naam-van-onderwerp.html' staat er alleen maar voor de zoekmachine vriendelijkheid. Waar wel naar gekeken wordt zijn de twee dingen ervoor. Daar staat namelijk de module (nieuws, meuktracker, plan, jobs) en het id van het betreffende onderdeel.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1