Pagina's in database naar array
Ik ben bezig met een website waar alle pagina's in een database staan met deze kolomen:
- id - Een auto-increment waarde
- name - De naam van de pagina
- href - De url van de pagina
- parent - Waar deze pagina een subpagina van is
De laatste kolom heeft misschien een beetje uitleg nodig:
Stel je hebt de pagina help met als id 23. Deze help-pagina heeft 3 subpagina's: 'over deze site', 'FAQ' en 'Contact'. Dan hebben de 3 subpagina's in hun parent de id van help (23) staan. Omdat er geen pagina boven de help-pagina staat, heeft hij de waarde 0 (kan ik ook NULL van maken, maakt niet uit).
Mijn vraag is: Hoe kan ik dit in een array van dit formaat krijgen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
Array (
[0] = Array (
['help'] = "/help.php",
['over deze site'] = "/help/overdezesite.php",
['FAQ'] = "/help/faq.php",
[0] = Array (
['contact'] = "/help/contact.php",
['via e-mail'] = "/help/contact.php?x=email",
['via telefoon'] = "/help/contact.php?x=telefoon"
)
)
)
[0] = Array (
['help'] = "/help.php",
['over deze site'] = "/help/overdezesite.php",
['FAQ'] = "/help/faq.php",
[0] = Array (
['contact'] = "/help/contact.php",
['via e-mail'] = "/help/contact.php?x=email",
['via telefoon'] = "/help/contact.php?x=telefoon"
)
)
)
In de database staan wel alle pagina's en subpagina's door elkaar, maar je kunt ze in je query natuurlijk sorteren.
Als ik de query heb, kan ik zelf wel het menu eromheen bouwen, maar ik kom nu echt niet verder.
Jullie hoeven voor mij niet een heel script te schrijven, maar een duuwtje in de goede richting kan ik goed gebruiken.
Alvast bedankt,
Daan
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
40
41
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
<?php
$query = "SELECT id, name, href FROM content WHERE parent = 0 ORDER BY naam";
$result = mysql_query($query);
if($result && mysql_num_rows($result) > 0)
{
echo '<ul id="menulijst">'."\n\r";
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$name = $row['name'];
$href = $row['href'];
$query2 = "SELECT name, href FROM content WHERE parent = ".$id." ORDER BY naam";
$result2 = mysql_query($query2);
if($result2 && mysql_num_rows($result2) > 0)
{
echo '<li><a href="?'.$href.'">'.ucfirst($name).'</a>'."\n\r";
echo '<ul>'."\n\r";
while($row2 = mysql_fetch_array($result2))
{
$id2 = $row2['paginaid'];
$name2 = $row2['name'];
$href2 = $row2['href'];
echo '<li><a href="'.$href2.'">'.ucfirst($name2).'</a></li>'."\n\r";
}
echo '</ul>'."\n\r";
echo '</li>'."\n\r";
}else{
echo '<li><a href="'.$href.'">'.ucfirst($name).'</a></li>'."\n\r";
}
}
echo '</ul>'."\n\r";
}
?>
$query = "SELECT id, name, href FROM content WHERE parent = 0 ORDER BY naam";
$result = mysql_query($query);
if($result && mysql_num_rows($result) > 0)
{
echo '<ul id="menulijst">'."\n\r";
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$name = $row['name'];
$href = $row['href'];
$query2 = "SELECT name, href FROM content WHERE parent = ".$id." ORDER BY naam";
$result2 = mysql_query($query2);
if($result2 && mysql_num_rows($result2) > 0)
{
echo '<li><a href="?'.$href.'">'.ucfirst($name).'</a>'."\n\r";
echo '<ul>'."\n\r";
while($row2 = mysql_fetch_array($result2))
{
$id2 = $row2['paginaid'];
$name2 = $row2['name'];
$href2 = $row2['href'];
echo '<li><a href="'.$href2.'">'.ucfirst($name2).'</a></li>'."\n\r";
}
echo '</ul>'."\n\r";
echo '</li>'."\n\r";
}else{
echo '<li><a href="'.$href.'">'.ucfirst($name).'</a></li>'."\n\r";
}
}
echo '</ul>'."\n\r";
}
?>
Zelf nog even debuggen, maar ik denk dat je hier een heel eind mee bent. Dit gaat overigens maar één niveau diep. Zal er nog een maken voor het 'oneindige'.
Gewijzigd op 01/01/1970 01:00:00 door Arjan Kapteijn
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
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
<?php
function menu_category($parent)
{
$query = "SELECT id, name, href FROM content WHERE parent = ".$parent;
$result = mysql_query($query);
if($result && mysql_num_rows($result) > 0)
{
echo '<ul>';
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$name = $row['name'];
$href = $row['href'];
echo '<li><a href="'.$href.'">'.ucfirst($name).'</a>';
menu_category($id);
echo '</li>';
}
echo '</ul>';
}
}
?>
function menu_category($parent)
{
$query = "SELECT id, name, href FROM content WHERE parent = ".$parent;
$result = mysql_query($query);
if($result && mysql_num_rows($result) > 0)
{
echo '<ul>';
while($row = mysql_fetch_array($result))
{
$id = $row['id'];
$name = $row['name'];
$href = $row['href'];
echo '<li><a href="'.$href.'">'.ucfirst($name).'</a>';
menu_category($id);
echo '</li>';
}
echo '</ul>';
}
}
?>
m'n bedoeling is om het in een array te zetten, ipv meteen te echoen. Maar met eerst de parents ophalen en daarna alle subpages daarvan is een goed idee! Dat had van mij kunnen zijn.. :p
K zat zelf alleen maar te kijken naar een manier om eerst alles binnen te halen en daarna pas in de array te zetten, maar dat blijkt lastig te zijn :p
Ga zelf nog ff prutsen, bedankt voor je nieuwe inspiratie!
Gewijzigd op 01/01/1970 01:00:00 door Daan
Bijvoorbeeld door:
Je krijgt nu alles in een multidimensionale array $content met als key het id uit de tabel en als waarde behorend bij die key weer een array met daarin 'naam' en 'href'.