Hallo mede-tweakers,
Nadat ik gisteren een hele tijd heb staan te kl*ten met dit systeem vraag ik toch om jullie hulp.
Wat ik wil is vrij simpel, ik ben voor mezelf een simpel CMS systeem aan het maken en wil pagina's onderliggend ( childrens ) aan elkaar kunnen maken.
Een voorbeeld van een menu volgorde:
Om dit te bereiken heb ik iedere pagina in de database een parent waarde gegeven.
In dit voorbeeld heeft pagina 3 als parent 1 en pagina 4 als parent 3 etc.
Pagina's zonder een bovenliggende pagina heb ik als parent waarde 0 gegeven.
Nu komt het probleem, deze pagina's wil ik vanuit de database netjes in een menu zetten ( met 1 database request ). Zelf heb ik, in mijn ogen, een heel omslaschtige manier verzonnen.
Ok, niet lachen
Nadat ik alle pagina's uit de database heb gehaald stop ik ze in een nieuwe array waarbij de key de parent is, oftewel ik sorteer ze op hun parent. Vervolgens ga ik met een foreach loop iedere parent af en controleer of er kinderen zijn. Deze manier is volgens mij heel omslachtig en moet er een andere simpelere methode zijn. Het liefst wil ik onbeperkt pagina's onder elkaar kunnen plaatsen.
De $list_parents heeft de volgende structuur:
Nadat ik gisteren een hele tijd heb staan te kl*ten met dit systeem vraag ik toch om jullie hulp.
Wat ik wil is vrij simpel, ik ben voor mezelf een simpel CMS systeem aan het maken en wil pagina's onderliggend ( childrens ) aan elkaar kunnen maken.
Een voorbeeld van een menu volgorde:
code:
1
2
3
4
5
6
7
8
| Pagina 1 - Pagina 3 - Pagina 4 - Pagina 6 - Pagina 7 - Pagina 8 - Pagina 5 Pagina 2 |
Om dit te bereiken heb ik iedere pagina in de database een parent waarde gegeven.
In dit voorbeeld heeft pagina 3 als parent 1 en pagina 4 als parent 3 etc.
Pagina's zonder een bovenliggende pagina heb ik als parent waarde 0 gegeven.
Nu komt het probleem, deze pagina's wil ik vanuit de database netjes in een menu zetten ( met 1 database request ). Zelf heb ik, in mijn ogen, een heel omslaschtige manier verzonnen.
Ok, niet lachen
Nadat ik alle pagina's uit de database heb gehaald stop ik ze in een nieuwe array waarbij de key de parent is, oftewel ik sorteer ze op hun parent. Vervolgens ga ik met een foreach loop iedere parent af en controleer of er kinderen zijn. Deze manier is volgens mij heel omslachtig en moet er een andere simpelere methode zijn. Het liefst wil ik onbeperkt pagina's onder elkaar kunnen plaatsen.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| <?php $pages = array( array('name' => 'Pagina 1','id' => 1,'parent' => 0), array('name' => 'Pagina 2','id' => 2,'parent' => 0), array('name' => 'Pagina 3','id' => 3,'parent' => 1), array('name' => 'Pagina 4','id' => 4,'parent' => 3), array('name' => 'Pagina 5','id' => 5,'parent' => 1), array('name' => 'Pagina 6','id' => 6,'parent' => 4), array('name' => 'Pagina 7','id' => 7,'parent' => 6), array('name' => 'Pagina 8','id' => 8,'parent' => 6), ); $num_parents = 0; $encountered_parents = array(); foreach($pages as $page) { $list_parents[$page['parent']][] = $page; if( !array_key_exists( $page['parent'], $encountered_parents ) ) { $num_parents++; $encountered_parents[ $page['parent'] ] = true; } } echo '<pre>'; print_r($list_parents); echo '</pre>'; echo '<ul>'; foreach( $list_parents[0] as $page ) { echo '<li>'; echo $page['name']; if( array_key_exists($page['id'], $list_parents) ) { echo '<ul>'; foreach( $list_parents[ $page['id'] ] as $layer2 ) { echo '<li>'; echo $layer2['name']; if( array_key_exists($layer2['id'], $list_parents) ) { echo '<ul>'; foreach( $list_parents[ $layer2['id'] ] as $layer3 ) { echo '<li>'; echo $layer3['name']; if( array_key_exists($layer3['id'], $list_parents) ) { echo '<ul>'; foreach( $list_parents[ $layer3['id'] ] as $layer4 ) { echo '<li>'; echo $layer4['name']; if( array_key_exists($layer4['id'], $list_parents) ) { echo '<ul>'; foreach( $list_parents[ $layer4['id'] ] as $layer5 ) { echo '<li>'; echo $layer5['name']; echo '</li>'; } echo '</ul>'; } echo '</li>'; } echo '</ul>'; } echo '</li>'; } echo '</ul>'; } echo '</li>'; } echo '</ul>'; } echo '</li>'; } echo '</ul>'; ?> |
De $list_parents heeft de volgende structuur:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
| Array ( [0] => Array ( [0] => Array ( [name] => Pagina 1 [id] => 1 [parent] => 0 ) [1] => Array ( [name] => Pagina 2 [id] => 2 [parent] => 0 ) ) [1] => Array ( [0] => Array ( [name] => Pagina 3 [id] => 3 [parent] => 1 ) [1] => Array ( [name] => Pagina 5 [id] => 5 [parent] => 1 ) ) [3] => Array ( [0] => Array ( [name] => Pagina 4 [id] => 4 [parent] => 3 ) ) [4] => Array ( [0] => Array ( [name] => Pagina 6 [id] => 6 [parent] => 4 ) ) [6] => Array ( [0] => Array ( [name] => Pagina 7 [id] => 7 [parent] => 6 ) [1] => Array ( [name] => Pagina 5 [id] => 8 [parent] => 6 ) ) ) |