Ugh. Ik heb zonet één van de viezere hacks sinds lang geperpetreerd.

Situatie: ik wil op bepaalde pagina’s van een website met ettelijke stapels pagina’s related links laten zien. Die dingen kunnen andere pagina’s zijn of files of websites.

Sommige van die links zijn aan één pagina gebonden (een jobadvertentie voor een job in Ouagadougou moet een link krijgen naar de website van Burkina Faso), maar andere zijn aan meer dan één pagina gebonden (bijvoorbeeld alle pagina’s van de bibliotheek in Natolin (Warschau) moeten een link krijgen naar de bibliotheek in Brugge, en vice versa). 

Probleempje daarbij is dat niet alle pagina’s in de database zitten. Dus ik kan niet iets doen als een kruistabel met links en dan een vinkje met “propagate down” om te zeggen dat iets voor deze pagina en alle onderliggende van toepassing is.

Alle pagina’s, ongeacht hun plaats in de boomstructuur, krijgen URL’s als /template.asp?pagename=pagina. Pagina’s die niet in de database zitten, krijgen een URL als /template.asp?pagename=pagina&sub=htmlfile—daarbij bepaalt de waarde van de pagename-parameter welke navigatie er rond de pagina gesmeten wordt, en is htmlfile de naam van de html-file (in dezelfde directory als waar de html-file van “pagina” staat) die getoond wordt binnen de navigatie.

Confused yet?

De redenen voor al die inefficiëntie (OK, OK, viezigheid) is dat ik nu geen nieuw systeem aan het uitvinden ben, maar gewoon op de bestaande infrastructuur blijf verder prutsen tot we een budget hebben.

Maar goed, related links dus. Ik had gedacht aan een mooie relationele tabel. En aan een combinatie met een gedenormaliseerde view. En aan allerlei propere dingen.

Nee hoor.

Een nieuwe tabel bijgemaakt, tblRelated, met velden

  • fromURL: substring van URL waarop de link getoond moet worden
  • link: link waarnaar verwezen wordt
  • pos: volgorde

Daar zit bijvoorbeeld in “libnatolin”, “libbrugesintro”, 999. En dat wordt opgevraagd met een query als

"select * from tblRelated left outer join tblnavigation on link=page 
where '"&Request.ServerVariables("path_info")&"?"
Request.ServerVariables("query_string")&"' like
'%'+fromURL+'%' order by pos"

Oei! Ai! Vies!

Maakt ervan gebruik dat de pagename-waarden min of meer hiërarchisch genoemd zijn (alles van de bibliotheek begint met libbruges of libnatolin bijvoorbeeld, de meeste zaken van Development Office beginnen met devo. En staat me toe dat ik ook dingen als “jobs&sub=” als fromURL kan ingeven, en dan daar een link zetten die geldt voor alle jobaanbiedingen.

Maar: zeer vies.

Maar: het werkt. En het is gedocumenteerd. ‘t Is toch al iets. 

Geschreven al luisteren naar: Bebo Valdés – Bebo Rides Again – Al Dizzy Gillespie

Geschreven al luisteren naar: Bebo Valdés – Bebo Rides Again – La Comparasa



Reacties

4 reacties op “Hackerdehack”

  1. ouch!ouch! SQL-insertion warning!!! Best nog een StringReplace(,”‘”,”””) rond die Request dingen zetten

    en voor de rest, ik heb nog viezere dingen gezien, zoals je zelf zegt, wat moeten we doen zonder buget?

  2. Hehe, altijd leuk te horen dat je niet de enige viezerik in programmeerland bent…

  3. Playlist:
    1. ALBERT AYLER ” Nuits de la Fondation Maeght”, vol. 1, #4 ” Spirit Rejoice”, een deconstructie van de Marseillaise op tenor sax.

    2. FRED VAN HOVE: om het even wat ( DDR opnames, Vogel, Konijn, etc.) een Antwerpenaar , oprichter van W.I.M. ( Werkgroep Improviserende Musici), speelt alle “klavieren” ( accordeon, piano, orgel, beiaard, etc.). Er zijn tallos veel klaviertechnieken door Fred voor het eerst in de praktijk gebracht, later hebben pianisten, die “wat beter in het vet zaten” ( zoals de overschatte Keith Jarreth) beweerd dat ze die allemaal “uitgevonden” hadden.

    3. THELONIUS MONK op ( eigenzinnige ) piano, klinkt op het eerste gehoor als gepingel voor silent movies . Probeer eens de scores na te spelen, veel succes gewenst.

    4. CHARLES MINGUS ( jazz bassist) , bijvoorbeeld beginnen bij “Changes 1 &2”.

    5. FRED FRITH, http://www.fred.frith.com, nu gelukkiglijk prof compositieleer in Mills College ( Cal.) Us, speelt nog altijd tegelijk in achterbuurten én prestigieuse concertzalen.Waarom niet beginnen bij ” Trains & Boats & Plains” van de grote B. Bacharach op “Great Jewish Music” , Tzadik, hommage aan B.B.? Ook meteen de quasi eindeloze productie van John Zorn ( ga na).

    6. GIL EVANS, de specialist van de klankkleur ( een “arrangeur”, dus).LP/CD: ” There Comes A Time”.

    7. FRANK ZAPPA , bijvoorbeeld aanvangen met “St Alphonso’s Pancake Breakfast”.

    8. RORY GALLAGHER ( eerste solo LP) “ Can’t believe it’s true”.

    9. MASSIVE ATTACK “Hymn of the Big Wheel”.

    10. CARLO GESUALDO DA VENOSA Zesde Madrigalenboek ( niet te geloven).

  4. @stijn: ugh!

    Zeer juist. ‘t Is al direkt aangepast. Ik haal er alles uit wat niet [A-Za-z0-9] of & of = is, andere karakters hebben daar niets te zoeken 🙂