Ik bouw een cms met behulp van mod_rewrite url's. Het principe is als volgt:
• http://www.website.com/fruit/appels/rood wordt omgezet naar
• http://www.website.com/index.php?q=fruit/appels/rood
• ik explode $_GET['q'] naar een array: $array[0] = 'fruit'; $array[1] = 'appels'; $array[2] = 'rood'
• ik ga in de database op zoek naar het id van de gevraagde pagina (in dit geval "rood")
Bij het laatste punt heb ik een probleem. Stel de volgende tabel "nodes":
Zie hier het probleem: ik heb de mogelijke paden
• schoenen/sportief/rood en
• fruit/appels/rood
Het probleem zit hier: hoe bepaal ik nu of ik de pagina met node_id 4 of node_id 7 moet laten zien? Antwoord: ik moet niet alleen kijken naar het laatste item in de querystring (in dit geval "rood") maar moet het gehele pad ("fruit/appels/rood") nalopen om uit te vinden welke pagina bedoeld wordt. Met andere woorden: "bestaat het gevraagde pad wel in de database?"
Tot nu toe heb ik dit (pseudo):
Vragen:
• Is dit een goede manier om te verifieren met welke pagina ik van doen heb?
• Hoe verwerk ik dit in een recursieve functie?
• http://www.website.com/fruit/appels/rood wordt omgezet naar
• http://www.website.com/index.php?q=fruit/appels/rood
• ik explode $_GET['q'] naar een array: $array[0] = 'fruit'; $array[1] = 'appels'; $array[2] = 'rood'
• ik ga in de database op zoek naar het id van de gevraagde pagina (in dit geval "rood")
Bij het laatste punt heb ik een probleem. Stel de volgende tabel "nodes":
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| +---------+----------------+-------------------+ | node_id | parent_id | node_name | +---------+----------------+-------------------+ | 1 | | home | +---------+----------------+-------------------+ | 2 | 1 | schoenen | +---------+----------------+-------------------+ | 3 | 2 | sportief | +---------+----------------+-------------------+ | 4 | 3 | rood | +---------+----------------+-------------------+ | 5 | 1 | fruit | +---------+----------------+-------------------+ | 6 | 5 | appels | +---------+----------------+-------------------+ | 7 | 6 | rood | +---------+----------------+-------------------+ |
Zie hier het probleem: ik heb de mogelijke paden
• schoenen/sportief/rood en
• fruit/appels/rood
Het probleem zit hier: hoe bepaal ik nu of ik de pagina met node_id 4 of node_id 7 moet laten zien? Antwoord: ik moet niet alleen kijken naar het laatste item in de querystring (in dit geval "rood") maar moet het gehele pad ("fruit/appels/rood") nalopen om uit te vinden welke pagina bedoeld wordt. Met andere woorden: "bestaat het gevraagde pad wel in de database?"
Tot nu toe heb ik dit (pseudo):
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| function check_pad($array, $i=0) { db_query('SELECT node_id FROM nodes WHERE node_name = "'.$array[0].'"'); // array[0] = 'fruit' -> resultaat van query = 5 db_query('SELECT node_id FROM nodes WHERE parent_id = 5 and node_name = "'.$array[1].'"'); // array[1] = 'appels' -> resultaat van query = 6 db_query('SELECT node_id FROM nodes WHERE parent_id = 6 and node_name = "'.$array[2].'"'); /* array[2] = 'rood' -> resultaat van query = 7 * we zijn nu aan het einde van de array (die was count($array) = 3 groot) * en moeten nu node_id 7 retourneren */ return 7; } |
Vragen:
• Is dit een goede manier om te verifieren met welke pagina ik van doen heb?
• Hoe verwerk ik dit in een recursieve functie?
"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."