[ISAPI rewrite] Naam naar id resolve probleem

Pagina: 1
Acties:

  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 04-03 21:01
Hey mensen,
Voor m'n CMS (gebouwd in ASP/VBscript) wil ik graag de hierachie weergeven in de URL.
Het CMS werkt zelf met een kruisverwijzing child_id/parent_id. dmv een functie die zichzelf aanroept kun je de hierarchie omhoog en omlaag gaan. De gehele URL is dus dynamisch opgebouwd.
Het moet er zo uitzien.
http://www.website.nl/Biografie/fotos/zomer2005/

Ik heb die inmiddels gerealiseerd door ASAPI Rewrite (het component) te gebruiken. Ik strip de laatste querystring ('zomer2005' in dit geval) en zoek hier mijn ID bij. Zover ik weet is dit de enige manier om dit te realiseren.

Probleem is dat het ook kan gebeuren dat een andere parent dezelfde contentnaam gebruikt
http://www.website.nl/Blog/zomer2005/

Het resolven van het bijbehoren ID gaat hier dus fout. De contentnaam hoeft natuurlijk niet uniek te zijn...

Heef iemand ervaring hiermee? Hoe hebben jullie dit opgelost?

Alvast bedankt!
Jeff


edit: bedenk ik me net dat waarschijnlijk de enige oplossing is om de laatste 2 querystring te filteren en het parent ook te resolven... maar misschien heeft iemand een ander idee, of ervaring :)

[ Voor 13% gewijzigd door kalechinees op 23-02-2006 21:42 ]


  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 04-03 21:01
kickje... niemand?

  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 04-03 21:01
Hmm nog maar een laatste schop :) aangezien er toch zoveel mensen hierin geintresseerd zijn :|

Heb een rewrite regel aangemaakt waarmee ik de laatste 2 directories omzet naar een ID en een parent ID. Probleem waar ik nu achterkom is dat ik hiermee niet 2x dezelfde hierarchische structuur kan gebruiken. Dit is een te grote beperking .

voorbeeld
http://www.website.nl/blog/Vakantie2004/Fotos/Natuur/
http://www.website.nl/blog/Vakantie2005/Fotos/Natuur

Als ik nu het ID van de pagina en de parent resolve dan heb ik nog steeds 2 mogelijkheden...

Grrrr ik ben er sterk aan het denken om gewoon een extra ID mee te sturen.... of heeft iemand een ander idee? Please??? misschien de modjes?

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022

Reveller

Hopla!

Je moet het pad dat in de URL gegeven wordt verifieren tegen je database. Aangenomen dat je een standaard child-parent relatie gebruik in je database, trek je de url uit elkaar en loop je terug in het pad om er zeker van te zijn welke pagina je moet laten zien. Dat kan met een recursieve functie die telkens een query op de DB afvuurt, of door aan het begin van de request de tabel leeg te trekken en een multidimensionale array op te bouwen die je doorloopt (is doorgaans sneller).

Een voorbeeld:
code:
1
2
3
4
5
6
7
id parent alias
---------------------
1  0      eten
2  0      drinken
3  1      groenten
4  3      bloemkool
5  2      bier

Als iemand naar voorbeeld.com/eten/groenten/bloemkool surft, splits je de hele url in een array en die array hersorteer je andersom:
code:
1
2
3
4
5
array(
  0 => bloemkool
  1 => groenten
  2 => eten
)
Je loopt nu door de url. In je database zoek je de parent van bloemkool op. Dat is groenten. De parent van groenten in de database is eten, en ook dat klopt met de url. Je weet nu zeker dat deze pagina een geldig pad heeft, en je laat de pagina met id 4 zien.

In het geval dat iemand naar voorbeeld.com/drinken/groenten/bloemkool surft, loop je in de derde loop automatisch vast. De database geeft als parent van groenten immers eten terug. In de url staat echter drinken, dus deze url is ongeldig. In dat geval geef je een "pagina bestaat niet" error oid.

Ik hoop dat je hiermee wat geholpen bent. Succes ermee! :)

[ Voor 4% gewijzigd door Reveller op 04-03-2006 13:25 ]

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


  • kalechinees
  • Registratie: Mei 2005
  • Laatst online: 04-03 21:01
Klinkt als een goede oplossing. Bedankt :) ik werd al bijna gek.
Je hoeft alleen volgens mij het array niet achterstevoren te schrijven. Hij kan tenslotte ook vooraan het pad beginnen te controleren.
Je zou evt eerst een query kunnen uitvoeren of een van de items ongeldig is. Dan hoeft hij niet de recursive loop te doorlopen...

Enige wat ik me dan nog afvraag is hoe de grotere CMS'en dit doen... Ze werken wel allemaal met een hierarchie in de URL, zonder gebruik van ID's... ik blijf het terugresolven van ID's een lelijke oplossing vinden. 8)7

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022

Reveller

Hopla!

kalechinees schreef op zaterdag 04 maart 2006 @ 19:37:
Enige wat ik me dan nog afvraag is hoe de grotere CMS'en dit doen... Ze werken wel allemaal met een hierarchie in de URL, zonder gebruik van ID's... ik blijf het terugresolven van ID's een lelijke oplossing vinden. 8)7
Uiteindelijk zul je met een dynamische site altijd moeten terugresolven naar een ID in je database, dus ook grotere CMS'en zullen zit doen. Waarschijnlijk met de nodige caching en temp-tables, maar het principe blijft gelijk. De enige andere mogelijkheid, waarbij je niet naar ID's hoeft te resolven, is een hardcoded hierarchie op het filesystem aanmaken, waarbij de url voorbeeld.com/groenten/winter/spruitjes bestaat uit fysieke (sub)mappen op de harde schijf, en waarbij je index.htm in de "spruitjes" map aanroept. Eigenlijk surf je dus naar voorbeeld.com/groenten/winter/spruitjes/index.htm.

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."

Pagina: 1