CMS url opslaan

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • mbenjamins
  • Registratie: December 2012
  • Laatst online: 09:04
Ik ben momenteel een klein cms aan het bouwen.
Nu ben ik benieuwd naar jullie advies op het volgende onderdeel.

Je hebt een url 'auto/audi/a3', nu ben ik benieuwd hoe jullie het zouden opslaan in de database.

De volgende opties zijn in mij opgekomen.
  1. Je slaat alleen de gedeelte op wat bij het menu hoort en via 'parend_id' kijk je wat er als de volgende gedeelte in de database bestaat. Je gaat net zolang door tot dat je de hele url hebt gehad.
  2. Je slaat in de menu tabel het in zijn geheel op.
Zelf dacht ik aan optie 2. Mij lijkt dat het makkelijks en het snelst.

Acties:
  • 0 Henk 'm!

  • MAX3400
  • Registratie: Mei 2003
  • Laatst online: 27-09 22:07

MAX3400

XBL: OctagonQontrol

Kan je niet eens simpel kijken naar hoe, bijvoorbeeld, Wordpress werkt en hoe content wordt opgeslagen om uiteindelijk een URL te worden en data te serveren?

Want als je nu je volledige absolute "content" of "URL" wil vastleggen, loop je tegen 2 logische problemen aan: migreren/hergebruiken van bepaalde zaken maak je relatief onmogelijk.

Mijn advertenties!!! | Mijn antwoorden zijn vaak niet snowflake-proof


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
Een richting om eens te bekijken is URL rewriting.

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

In principe doe je gewoon optie 1, dat is het makkelijkste en het snelste maar het ligt er een beetje aan wat je nu precies wil maken.

Acties:
  • +1 Henk 'm!

  • Kobus Post
  • Registratie: September 2010
  • Laatst online: 06-10 17:46
Je hebt een controller genaamd auto, deze accepteert urls van het volgende formaat:


/auto/{merk}/{model}


Wat je opslaat is het merk en model van de auto (of een id dat naar de desbetreffende auto verwijst), wil je de url hebben, dan bouw je deze op met het merk en model dat je opgeslagen hebt.

No trees were harmed in the creation of this message, but several thousand electrons were mildly inconvenienced.


Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
mbenjamins schreef op zaterdag 14 juli 2018 @ 11:21:
  1. Je slaat alleen de gedeelte op wat bij het menu hoort en via 'parend_id' kijk je wat er als de volgende gedeelte in de database bestaat. Je gaat net zolang door tot dat je de hele url hebt gehad.
  2. Je slaat in de menu tabel het in zijn geheel op.
Menu is wat anders dan een Unified Resource Locator Path element.
Mij zie je dat dus niet in menu frutten zoals Joomla dat doet.

Je kan het oplossen met routing in bijvoorbeeld een resources tabel en/of wat @Kobus Post zegt.

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • mbenjamins
  • Registratie: December 2012
  • Laatst online: 09:04
Wat ik als url voorbeeld gebruik kan van alles zijn. Gaat er mij meer om als je een menu structuur heb die 3 lagen genest is.
Het gaat mij namelijk puur om de content gedeelte wat de klant zelf kan regelen wat @Kobus Post zegt dat snap ik en zou dat ook zo doen als het nodig is.

Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@mbenjamins heb je het nou over menu of pad of inhoud?

Menu kan prima "Auto -> Audi -> A3" zijn, en verwijzen naar inhoud op: /motorvoertuigen/audi/a3
En dus ook "Motor -> Aprilia -> RSV4" zijn, en verwijzen naar inhoud op: /motorvoertuigen/aprilia/rsv4

Voor menu gebruik ik naast een parent_id kolom ook een sortpath kolom
code:
1
2
3
4
5
6
7
8
id parent_id sortpath label    URI
1   0        01       Auto's
2   1        01|01    Audi
3   2        01|01|01 A3       /motorvoertuigen/audi/a3
4   2        01|01|02 A4       /motorvoertuigen/audi/a4
5   0        02       Motoren
6   5        02|01    Aprilia
7   6        02|01|01 RSV4     /motorvoertuigen/aprilia/rsv4

SELECT * FROM menu ORDER BY sortpath

[ Voor 10% gewijzigd door DJMaze op 15-07-2018 10:38 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 06-10 11:28

TheNephilim

Wtfuzzle

mbenjamins schreef op zaterdag 14 juli 2018 @ 16:12:
Wat ik als url voorbeeld gebruik kan van alles zijn. Gaat er mij meer om als je een menu structuur heb die 3 lagen genest is.
Het gaat mij namelijk puur om de content gedeelte wat de klant zelf kan regelen wat @Kobus Post zegt dat snap ik en zou dat ook zo doen als het nodig is.
Kortom; je hebt waarschijnlijk iets als pagina's, waarin je elke structuur zou willen maken? Dus geen tabel in je database met auto's, merken en modellen.

Acties:
  • 0 Henk 'm!

  • mbenjamins
  • Registratie: December 2012
  • Laatst online: 09:04
TheNephilim schreef op maandag 16 juli 2018 @ 09:50:
[...]


Kortom; je hebt waarschijnlijk iets als pagina's, waarin je elke structuur zou willen maken? Dus geen tabel in je database met auto's, merken en modellen.
Dat klopt het kan namelijk ook iets zijn als Over ons->Contact net wat de klant zelf aanmaakt.

Bij @DJMaze zie ik in de URI wat ik bedoel.
Je kunt het namelijk ook als volgt opslaan.
code:
1
2
3
4
5
6
7
id parent_id sort     label       url
1   0        1        Auto's      motorvoertuigen
2   1        1        Audi        audi
3   2        1        A3          a3
4   2        2        A4          a4
5   0        2        Over ons    over-ons
6   5        1        Contact     contact

Volgens mij kun je het beste volledig opslaan zodat je meer vrijheid hebt en niet gaat kijken bij het laden wat voor url heeft de volgende menu item en zo hopelijk bij de juiste uit te komen.

@DJMaze wat jij bij sortpath hebt staan is toch puur voor de volgorde van het tonen van het menu? Ik heb dat zelf met numeriek getal wat ik steeds op hoog per niveau. Krijgt bij mij een menu item een submenu dan begin ik weer te tellen bij 1.

Ik hoop dat het zo een stuk duidelijker is met wat ik bedoel.

Acties:
  • 0 Henk 'm!

  • Thijsmans
  • Registratie: Juli 2001
  • Laatst online: 13:17

Thijsmans

⭐⭐⭐⭐⭐ (5/5)

Ik vraag me af of je het dan niet onnodig gecompliceerd maakt. Dan moet je een url bij elke request echt gaan terugberedeneren tot op het laatste ID. Dat lijkt me, zeker bij een grote site, nogal een performance-dingetje.

Ik zou een tabel maken waarin alle URL's al (volledig) gegenereerd zijn. Dat genereren kan prima als je een item aanmaakt of wijzigt; vaker hoeft het niet. En wat je zegt, dan kun je ook nog eens handmatig iets invoegen zonder dat je hele systeem spaak loopt.

/edit: het bovenstaande geldt natuurlijk niet als je automatisch een menu wil laten genereren van alle opgeslagen paden.

[ Voor 11% gewijzigd door Thijsmans op 16-07-2018 21:46 ]

Privacy-adepten vinden op AVGtekst.nl de Nederlandse AVG-tekst voorzien van uitspraken en besluiten.


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
mbenjamins schreef op maandag 16 juli 2018 @ 21:25:
wat jij bij sortpath hebt staan is toch puur voor de volgorde van het tonen van het menu? Ik heb dat zelf met numeriek getal wat ik steeds op hoog per niveau. Krijgt bij mij een menu item een submenu dan begin ik weer te tellen bij 1.
Klopt, ik haal het menu op met 1 query, jij hebt er veel meer nodig (of complexe code).
Zie: https://bitbucket.org/djm...-view-default#menu.php-55

[ Voor 16% gewijzigd door DJMaze op 17-07-2018 08:05 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Tjolk
  • Registratie: Juni 2007
  • Laatst online: 06-10 20:26
mbenjamins schreef op zaterdag 14 juli 2018 @ 16:12:
Wat ik als url voorbeeld gebruik kan van alles zijn. Gaat er mij meer om als je een menu structuur heb die 3 lagen genest is.
Waarom per se 3 lagen? Vroeg of laat loop je er dan tegenaan dat iemand meer of juist minder lagen wil hebben. Bijvoorbeeld auto/audi/a3/2017/nl of accessoires/comfort.

Ik zou daarom simpelweg de parent_id opslaan, waarbij parent_id 0 slaat op het hoogste niveau. Dan blijf je flexibel. Qua url zorg je gewoon dat iedere pagina een alias heeft. Die plak je aan elkaar met slashes voor een pad.

code:
1
2
3
4
5
6
7
8
id parent_id title     alias
1   0        Auto's    autos
2   1        Audi      audi
3   2        A3        a3
4   2        A4        a4
5   0        Motoren   motoren
6   5        Aprilia   aprilia
7   6        RSV4      rsv4


Je haalt dan in een simpele loop op wat de tree voor dat id is. Dan heb je bijvoorbeeld:
PHP:
1
implode('/', $aliases);


Als dit heel groot kan worden kun je het resultaat hiervan natuurlijk prima cachen totdat er weer een pagina wordt toegevoegd.

Op deze manier ben je gewoon heel flexibel en dwing je je klanten ook niet in een keurslijf van 3 lagen.

Tjolk is lekker. overal en altijd.

Pagina: 1