Geneste items ophalen
Aan gegevens die in je database staan heb je niks als je ze er niet uit kunt halen. Ik zal hier een manier laten zien om dat slim aan te pakken. Er zijn verschillende mogelijkheden, maar deze vind ik zelf het makkelijkst.
Stap 1: De query
De query is eigenlijk net zoals elke andere SELECT-query.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// Maak eerst zelf verbinding met de database
mysql_connect('localhost', 'gebruiker', wachtwoord);
mysql_select_db('database');
// Voer de query uit
$query = 'SELECT pagina_id, ouder_id, titel FROM Menu';
$resultaat = mysql_query($query) or die('De query kon niet uitgevoerd worden.');
?>
// Maak eerst zelf verbinding met de database
mysql_connect('localhost', 'gebruiker', wachtwoord);
mysql_select_db('database');
// Voer de query uit
$query = 'SELECT pagina_id, ouder_id, titel FROM Menu';
$resultaat = mysql_query($query) or die('De query kon niet uitgevoerd worden.');
?>
Dit is verder niks bijzonders. Maar hoe kan je hier nou makkelijk een lijst van maken?
Stap 2: De gegevens in een array plaatsen
De tweede stap is om de gegevens in een multidimensionale array te plaatsen.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// Sla de pagina's op in een array
$paginas = array();
while (list($pagina_id, $ouder_id, $titel) = mysql_fetch_array($resultaat)) {
// Voeg toe aan de array
$paginas[$ouder_id][$pagina_id] = $titel;
}
?>
// Sla de pagina's op in een array
$paginas = array();
while (list($pagina_id, $ouder_id, $titel) = mysql_fetch_array($resultaat)) {
// Voeg toe aan de array
$paginas[$ouder_id][$pagina_id] = $titel;
}
?>
Dit ziet er al iets ingewikkelder uit. Wat we hier doen is een array maken die er als volgt uit komt te zien:
Code (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
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
Array
(
[0] => Array
(
[1] => Informatie
[11] => PHP stuff
[15] => Forum
[16] => Contact
)
[1] => Array
(
[2] => Nieuws
[3] => FAQ
[10] => Over PHPhulp
)
[3] => Array
(
[4] => Wat is PHPhulp?
[5] => Auteursrechten
[6] => Hoe voeg ik iets toe?
[7] => Welke codes kan ik gebruiken?
)
[7] => Array
(
[8] => Ignore
[9] => Teksten
)
[11] => Array
(
[12] => PHP tutorials
[13] => PHP scripts
[14] => PHP boeken
)
)
(
[0] => Array
(
[1] => Informatie
[11] => PHP stuff
[15] => Forum
[16] => Contact
)
[1] => Array
(
[2] => Nieuws
[3] => FAQ
[10] => Over PHPhulp
)
[3] => Array
(
[4] => Wat is PHPhulp?
[5] => Auteursrechten
[6] => Hoe voeg ik iets toe?
[7] => Welke codes kan ik gebruiken?
)
[7] => Array
(
[8] => Ignore
[9] => Teksten
)
[11] => Array
(
[12] => PHP tutorials
[13] => PHP scripts
[14] => PHP boeken
)
)
Zoals je ziet maken we een array met als buitenste key de waarde van ouder_id. De waarde van deze buitenste array is een andere array met daarin alle pagina’s met deze ouder_id.
Stap 3: De items weergeven
Tot slot moeten we deze array nog netjes weergeven aan de gebruiker. Hiervoor maken we gebruik van een recursieve functie.
Code (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
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
<?php
function maak_lijst($ouder) {
// We hebben de paginas array nodig
global $paginas;
// Start een geordende lijst
echo '<ol>';
// Maak een lus voor elke onderliggende array
foreach ($ouder as $pagina_id => $titel) {
// Weergeef de pagina
echo '<li>'.$titel;
// Controleer op subtaken
if (isset($paginas[$pagina_id])) {
// Roep deze functie weer aan
maak_lijst($paginas[$pagina_id]);
}
// Sluit het lijst item
echo '</li>';
}
// Sluit de geordende lijst
echo '</ol>';
}
// Verzend de root-items naar de functie
maak_lijst($paginas[0]);
?>
function maak_lijst($ouder) {
// We hebben de paginas array nodig
global $paginas;
// Start een geordende lijst
echo '<ol>';
// Maak een lus voor elke onderliggende array
foreach ($ouder as $pagina_id => $titel) {
// Weergeef de pagina
echo '<li>'.$titel;
// Controleer op subtaken
if (isset($paginas[$pagina_id])) {
// Roep deze functie weer aan
maak_lijst($paginas[$pagina_id]);
}
// Sluit het lijst item
echo '</li>';
}
// Sluit de geordende lijst
echo '</ol>';
}
// Verzend de root-items naar de functie
maak_lijst($paginas[0]);
?>
Als eerste wordt de array met root items naar deze functie verzonden. De geordende lijst wordt gestart en elk item wordt bekeken. Ook wordt er per item bekeken of het kinderen heeft. Als dat het geval is, wordt de array met kinderen naar deze functie verstuurd. Tot slot wordt de geordende lijst weer afgesloten.
Door de array met kinderen weer naar dezelfde functie te sturen, komt er een geordende lijst binnen het lijst-item. Het resultaat staat hieronder.
Code (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
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
<ol>
<li>Informatie
<ol>
<li>Nieuws</li>
<li>FAQ
<ol>
<li>Wat is PHPhulp?</li>
<li>Auteursrechten</li>
<li>Hoe voeg ik iets toe?</li>
<li>Welke codes kan ik gebruiken?
<ol>
<li>Ignore</li>
<li>Teksten</li>
</ol></li>
</ol></li>
<li>Over PHPhulp</li>
</ol></li>
<li>PHP stuff
<ol>
<li>PHP tutorials</li>
<li>PHP scripts</li>
<li>PHP boeken</li>
</ol></li>
<li>Forum</li>
<li>Contact</li>
</ol>
<li>Informatie
<ol>
<li>Nieuws</li>
<li>FAQ
<ol>
<li>Wat is PHPhulp?</li>
<li>Auteursrechten</li>
<li>Hoe voeg ik iets toe?</li>
<li>Welke codes kan ik gebruiken?
<ol>
<li>Ignore</li>
<li>Teksten</li>
</ol></li>
</ol></li>
<li>Over PHPhulp</li>
</ol></li>
<li>PHP stuff
<ol>
<li>PHP tutorials</li>
<li>PHP scripts</li>
<li>PHP boeken</li>
</ol></li>
<li>Forum</li>
<li>Contact</li>
</ol>
En dit is precies wat we wilde hebben. Natuurlijk is dit nog geen menu, maar dit is wel de basis. Als je die eenmaal goed beheerst, kan je het uitbreiden en aanpassen aan je eigen behoeften.
« vorige pagina | volgende pagina »
Inhoudsopgave
- Inleiding
- Wat zijn geneste items?
- Geneste items opslaan
- Geneste items ophalen
- Opslaan in XML
- Slotwoord en referenties