Toon posts:

[ALG] Databasegebaseerde site maken, een uitgebreide vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben al een hele tijd aan het nadenken over hoe ik mijn site volledig databasegebaseerd kan maken. De huidige navigatiestructuur van mijn site voldoet niet meer en het ontwerp evenmin. Het gaat om een site met zo'n 8 hoofdcategorieën en 200 pagina's. De site groeit gestaag. De 8 hoofdcategorieën corresponderen met directories in /. Zo:

/ - home
/blue_widgets - blue widgets
/brown_widgets - brown widgets
/yellow_widgets - yellow widgets
/news - news

Ik ben aan het nadenken over een goede databaselayout. Ik wil zoekmachinevriendelijke en hackable URLs gebruiken. Hiervoor zal ik htaccess gebruiken en een mapping van file- en directorynamen op unieke article_id's in de database.

Voorbeeld htaccess

De URL www.mijnsite.com/blue_widgets/widget_structure.html

Met een regel in .htaccess strip ik de directorynaam (blue_widgets) en de filenaam (widget_structure) uit de URL. Deze directorynaam en filenaam gebruik ik om artikel content, advertentieposities, een navigatiemenu, etc uit de database op te vragen.

RewriteRule ^(.*)/(.*).html$ get_article_data.php?dirname=$1&&pagename=$2 [L]
(dit klopt misschien niet helemaal, maar het gaat nu even om het idee)

Database

Ik zou aparte tabellen maken voor

- De mapping van directorynamen en filenamen op artcile_id's. (dirname, filename, article_id)
- text content (aticle_id, article_text)
- links in het navigatiemenu (article_id, nav_link)
- advertenties (werkt ook met article_id, de overige velden moet ik nog verder uitwerken)
- meta info (article_id, keywords, titel, description)

Ik heb het hier voornamelijk over het artikelengedeelte van mijn site. De homepage en nieuwssectie vereisen aparte functionaliteit en wat eigen database tabellen waarschijnlijk.


Wat denken jullie van zo'n aanpak? Een probleem dat ik zie is dat ik misschien wel een keer een directory wil toevoegen onder het laagste niveau, bijvoorbeeld /blue_widgets/widget_stores/.

Ik zou in dat geval de htaccess file aan moet passen zodat deze ook requests op deze directory vangt en de nieuwe variabele (widget_stores) doorgeeft aan de database. Daarnaast zou ik de database aan moeten passen. Al met al een lastige klus.

Eigenlijk is mijn vraag dus iets breder: hoe bouw je een databasesysteem voor een website dat van zichzelf rekening houdt met een zich uitbreidende sitestructuur, terwijl er alleen een virtueel filesysteem bestaat, namelijk de mapping van URLs naar de database via htaccess?

Niet echt een vraag die je in drie regels beantwoordt lijkt me. Ik heb het systeem dat ik hierboven beschrijf al eens gebouwd en het werkt vrij aardig zolang de site structuur gelijk blijft, maar dat is nu juist het punt waarop mijn andere site verschilt: hij verandert te veel.

Alle suggesties zijn welkom. Ik wil wel graag zelf iets bouwen op mijn wensen, ook omdat ik dat leuk vind. Een open source systeem als Mambo is prachtig en waarschijnlijk 100 keer beter, maar toch maak ik het liever zelf.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18:05
Zou je misschien willen vertellen waarom je het zelf wilt maken? Het lijkt mij dat je beter een nuttige bijdrage aan een bestaand project kunt leveren, maargoed dat is mijn mening.

Over je vraag: Ik zie vooral vaak een opzet met 1 basis tabel welke een tree vormt. Vervolgens hang je hier dus alle pagina's in. Aan de pagina's koppel je vervolgens weer content elementen welke soms in een andere tabel staan. Voor bijvoorbeeld nieuwsberichten maak je een table news met daarin het veld PID waarmee je het nieuwsrecord in de tabel kan plaatsen.

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:00
Je wilt dus een algemene structuur voor een uitgebreide website. En je wil uitbreidbaarheid. Wat ik je zou adviseren is een systeem waarbij alle logica in je database zit en er dus geen fysieke koppeling is naar het bestandssysteem. Dat komt al gauw neer op het bouwen van een tree zoals hierboven als is aangegegeven.
In de tree table geef je aan of een node wildcards mag hebben. De node /mijnsite/widget_news/articles/ kent bijvoordeeld verschilende article-id's die verwijzen naar verschillende artikels. De node /mijnsite/about/ is echter statisch en mag dus geen wildcards hebben. De mapping van de urls zou ik dus absoluut niet doen dmv van htacces files. De mappings kun je prima doen met "multiviews". Gewoon de verkregen URL nalopen in je basisbestandje en de gewenste content serveren op basis van een database actie...

[ Voor 3% gewijzigd door T-MOB op 15-12-2004 02:35 ]

Regeren is vooruitschuiven


Verwijderd

Topicstarter
Bedankt. Nuttige info. Er begint zich al een wat duidelijker beeld af te tekenen van hoe ik dit ga doen, maar ik begrijp het idee van die tree en de nodes niet helemaal. Zou je een voorbeeld kunnen geven van hoe zo'n tree tabel er uit zou komen te zien?

In elk geval bedacht ik dat ik met Multiviews en

PHP:
1
  $array = explode('/' , $_SERVER['REQUEST_URI']);


kunnen werken om te bepalen welk artikel of welke directory opgevraagd wordt. Het moeilijke punt is het verschil tussen een directory en artikel. Maar dat is volgens mij waar dat node verhaal over gaat, maar dat zie ik dus nog niet helemaal voor me.

  • 4VAlien
  • Registratie: November 2000
  • Laatst online: 08-04 20:02

4VAlien

Intarweb!

Afbeeldingslocatie: http://130.89.161.66/~rene/layout.gif

Hier een voorbeeld om het verschil tussen nodes en leaves aan te geven. Je hebt het root element (een special node) en onder nodes kunnen zowel nodes als leaves zitten. De leaves zijn de uiteindelijke pagina's en die kunnen evt. naar een andere tabel verwijzen.

Een node tabel zou kunnen zijn:
Id     parent ID   value   Naam

en bij value vul je dan bijvoorbeeld 0 is als het een node is, en een niet nul nummer als het een leaf is waarbij dat niet nul nummer dan verwijst naar een artikel in de artikel database. Eventueel kan je daar nog een tabel tussen gooien als je verschillende typen leaves hebt.

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18:05
Verwijderd schreef op donderdag 16 december 2004 @ 02:23:
PHP:
1
  $array = explode('/' , $_SERVER['REQUEST_URI']);
Je ben nog lang niet bij het coden, denk eerst na over strucuur e.d.

Sowieso lijkt het me verstandig om gewoon te beginnen met id's, dus index.php?id=5 om pagina 5 te laden. Aliassen zoals in je voorbeeld zijn weer extra functionaliteit.

Verwijderd

Topicstarter
Top. Dit is erg duidelijk. Bedankt 4VAlien voor het plaatje :) Ik ga proberen een passend datamodel te maken op basis hiervan.

djluc, die zoekmachinevriendelijke URLs kunnen ook later inderdaad.
Pagina: 1