De array $nodes bevat alle nodes uit de database, met properties per node:
Op elke request lees ik de url uit, en match deze met de array-keys. Vervolgens retourneert onderstaande functie de goede path:
Om diverse redenen heb ik de $nodes array nu anders opgezet. De array-keys bestaan nu uit de node id's. De url is van key naar propertie gegaan:
Als laatste moet ik de get_true_path() functie aanpassen, maar ik loop tegen enkele problemen aan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Array ( [groenten] => Array ( [nid] => 1 [path] => story/view/1 ) [groenten/winter] => Array ( [nid] => 2 [path] => story/view/2 ) ) |
Op elke request lees ik de url uit, en match deze met de array-keys. Vervolgens retourneert onderstaande functie de goede path:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| function get_true_path($path, $nodes) { $map = $nodes; $url = $path; while ($url && !$map[$url]) $url = substr($url, 0, strrpos($url, '/')); if ($map[$url]['path']) { $arg = substr($_GET['q'], strlen($url) + 1); if (isset($arg)) return $map[$url]['path'].'/'.$arg; else return $map[$url]['path']; } else { return $path; } } //get_true_path('groenten/winter/22', $nodes) geeft 'story/view/2/22' terug. |
Om diverse redenen heb ik de $nodes array nu anders opgezet. De array-keys bestaan nu uit de node id's. De url is van key naar propertie gegaan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| Array ( [1] => Array ( [url] => groenten [path] => story/view/1 ) [2] => Array ( [url] => groenten/winter [path] => story/view/2 ) ) |
Als laatste moet ik de get_true_path() functie aanpassen, maar ik loop tegen enkele problemen aan:
- while ($url && !$map[$url]): de $map[$url] controle kan ik nu niet meer uitvoeren. Ik kan dit veranderen in in_array($url, $map), maar dan heb ik later in de code weer een probleem;
- if ($map[$url]['path']): ik kan niet meer vergelijken op $url. Hoe kan ik toch de array even efficient als met deze regel doorlopen en de werking van get_true_path() gelijk houden?
"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."