menu genereren
ik heb een tabel zoals hieronder (alleen ndan veel langer)
id | titel | menu_id
---------------------
1 | hooft p1| H
2 | sub p1 | 1
3 | sub p2 | 1
4 | sub p3 | 5
5 | sub p4 | -
6 | hoofd p2| H
hieruit moet het volgende menu worden gegenereerd
hooft p1
- sub p1
- sub p2
hoofd p2
- sub 5
- sub p2
Ik kom er alleen niet uit hoe ik dit moet aanpakken. Hoe kan ik dit voor elkaar krijgen? of moet ik mijn menu heel anders in elkaar gaan zetten?
Gewijzigd op 01/01/1970 01:00:00 door Net-marker
Zoek eventjes goed op google:
http://www.google.nl/search?hl=nl&q=css+submenu
of
http://www.google.nl/search?hl=nl&q=javascript+submenu
Ik zouw zelf voor css gaan,
Groetjes, Robin.
<ul>
<li class="home">a</li>
<li class="home">b</li>
<li class="home">c</li>
</ul>
<li>Specialisaties</li>
<li>Activiteiten</li>
<li>Contact</li>
</ul>
maar ik weet niet hoe ik het in de JUISTE volgorde kan genereren
Ik heb wel een voorbeeld liggen van iets dat heel erg op dit probleem lijkt. Je zult het naar je eigen situatie moeten omzetten, maar wellicht heb je er iets aan. Geef maar een seintje als je geïnteresseerd bent.
Dat script werkt mo <ul>'s en <li>'s. Het is een menu met categoriën en per cat nog onderliggende items.
Ik post het zodadelijk.
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
<?
include ('includes/config.php');//DB connectie maken
$sql = "SELECT * FROM menucats ORDER BY nummer ASC";
$cres = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($cres) >= 1)
{
echo '<ul class="menucats">';
while ($crow = mysql_fetch_array ($cres))
{
echo'<li>'.$crow['catname'].'</li>';
$sql = "SELECT * FROM menuitems WHERE catid = ".$crow['nummer']."";
$res = mysql_query ($sql) or die (mysql_error ());
if (mysql_num_rows ($res) >= 1)
{
echo '<ul class="menuitems">';
while ($row = mysql_fetch_array ($res))
{
echo '<li><a href="'.$row['url'].'">'.$row['tekst'].'</a></li>';
}
echo '</ul>';
}
}
echo '</ul>';
}
?>
include ('includes/config.php');//DB connectie maken
$sql = "SELECT * FROM menucats ORDER BY nummer ASC";
$cres = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($cres) >= 1)
{
echo '<ul class="menucats">';
while ($crow = mysql_fetch_array ($cres))
{
echo'<li>'.$crow['catname'].'</li>';
$sql = "SELECT * FROM menuitems WHERE catid = ".$crow['nummer']."";
$res = mysql_query ($sql) or die (mysql_error ());
if (mysql_num_rows ($res) >= 1)
{
echo '<ul class="menuitems">';
while ($row = mysql_fetch_array ($res))
{
echo '<li><a href="'.$row['url'].'">'.$row['tekst'].'</a></li>';
}
echo '</ul>';
}
}
echo '</ul>';
}
?>
De db structuur:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `menucats` (
`id` int(11) NOT NULL auto_increment,
`catname` varchar(100) NOT NULL default '',
`nummer` int(2) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `menuitems` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(200) NOT NULL default '',
`tekst` varchar(200) NOT NULL default '0',
`catid` int(2) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
`id` int(11) NOT NULL auto_increment,
`catname` varchar(100) NOT NULL default '',
`nummer` int(2) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
CREATE TABLE `menuitems` (
`id` int(11) NOT NULL auto_increment,
`url` varchar(200) NOT NULL default '',
`tekst` varchar(200) NOT NULL default '0',
`catid` int(2) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Om de volgorde van de cats te wijzigen:
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
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
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
<?php
//haal hoogste nummer op
$maxnr_row = mysql_fetch_assoc(mysql_query("SELECT MAX(nummer) AS maximum FROM menucats"))or trigger_error(mysql_error());
$maxnr = $maxnr_row['maximum'];
//controleer of er op de downlink is geklikt
if(isset($_GET['down']) && is_numeric($_GET['down']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
//bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']+1;
//controleer of het wel mogelijk is een item nog verder op te schuiven
if($nr_change >$maxnr){
echo 'Dit Item kan niet nog verder naar het einde van het menu worden geschoven';
}
//als op kan schuiven, voer dan de update uit
else{
$downqry = "SELECT id FROM menucats WHERE nummer = '".$nr_change."'";
$downrow = mysql_fetch_assoc(mysql_query($downqry));
$update_down = mysql_query("UPDATE menucats SET nummer = nummer+1 WHERE id=".$_GET['down']);
if (!$update_down){
trigger_error(mysql_error());
}
$update_up = mysql_query("UPDATE menucats SET nummer = nummer-1 WHERE id=".$downrow['id']);
if (!$update_up){
trigger_error(mysql_error());
}
}
}
}
//controleer of op de uplink is geklikt
if(isset($_GET['up']) && is_numeric($_GET['up']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
// bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']-1;
// controleer of het mogelijk is het gekozen item nog verder omhoog te schuiven
if($nr_change == 0){
echo 'Dit Item kan niet nog verder naar het begin van het menu worden geschoven';
}
//als het goed is gekeurd, dan de rijen weer updaten.
else{
$upqry = "SELECT id FROM menucats WHERE nummer = '".$nr_change."'";
$uprow = mysql_fetch_assoc(mysql_query($upqry));
$update_up = mysql_query("UPDATE menucats SET nummer = nummer-1 WHERE id=".$_GET['up']);
if (!$update_up){
trigger_error(mysql_error());
}
$update_down = mysql_query("UPDATE menucats SET nummer = nummer+1 WHERE id=".$uprow['id']);
if (!$update_down){
trigger_error(mysql_error());
}
}
}
}
$sql = "SELECT * FROM menucats ORDER BY nummer ASC";
$result = mysql_query($sql);
if($result){
echo '<ul class="menucats">';
while($row = mysql_fetch_assoc($result)){
echo '<li>'.$row['catname'].' <a href="?up='.$row['id'].'&nummer='.$row['nummer'].'"><img src="../images/arrowu.gif" border="0" alt="Omhoog"></a> <a href="?down='.$row['id'].'&nummer='.$row['nummer'].'"><img src="../images/arrowd.gif" border="0" alt="Omlaag"></a></p>';
}
echo '</ul>';
}
else{
trigger_error(mysql_error());
}
//Credits Robert (PHPHulp, http://www.phphulp.nl/php/scripts/3/832/)
?>
//haal hoogste nummer op
$maxnr_row = mysql_fetch_assoc(mysql_query("SELECT MAX(nummer) AS maximum FROM menucats"))or trigger_error(mysql_error());
$maxnr = $maxnr_row['maximum'];
//controleer of er op de downlink is geklikt
if(isset($_GET['down']) && is_numeric($_GET['down']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
//bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']+1;
//controleer of het wel mogelijk is een item nog verder op te schuiven
if($nr_change >$maxnr){
echo 'Dit Item kan niet nog verder naar het einde van het menu worden geschoven';
}
//als op kan schuiven, voer dan de update uit
else{
$downqry = "SELECT id FROM menucats WHERE nummer = '".$nr_change."'";
$downrow = mysql_fetch_assoc(mysql_query($downqry));
$update_down = mysql_query("UPDATE menucats SET nummer = nummer+1 WHERE id=".$_GET['down']);
if (!$update_down){
trigger_error(mysql_error());
}
$update_up = mysql_query("UPDATE menucats SET nummer = nummer-1 WHERE id=".$downrow['id']);
if (!$update_up){
trigger_error(mysql_error());
}
}
}
}
//controleer of op de uplink is geklikt
if(isset($_GET['up']) && is_numeric($_GET['up']) && isset($_GET['nummer']) && is_numeric($_GET['nummer'])){
if($_GET['nummer'] > $maxnr || $_GET['nummer'] < 1){
echo 'U moet het script zijn werk laten doen en er niet zelf mee gaan prutsen';
}
else{
// bepaal het nummer van de andere link die van plaats veranderd
$nr_change=$_GET['nummer']-1;
// controleer of het mogelijk is het gekozen item nog verder omhoog te schuiven
if($nr_change == 0){
echo 'Dit Item kan niet nog verder naar het begin van het menu worden geschoven';
}
//als het goed is gekeurd, dan de rijen weer updaten.
else{
$upqry = "SELECT id FROM menucats WHERE nummer = '".$nr_change."'";
$uprow = mysql_fetch_assoc(mysql_query($upqry));
$update_up = mysql_query("UPDATE menucats SET nummer = nummer-1 WHERE id=".$_GET['up']);
if (!$update_up){
trigger_error(mysql_error());
}
$update_down = mysql_query("UPDATE menucats SET nummer = nummer+1 WHERE id=".$uprow['id']);
if (!$update_down){
trigger_error(mysql_error());
}
}
}
}
$sql = "SELECT * FROM menucats ORDER BY nummer ASC";
$result = mysql_query($sql);
if($result){
echo '<ul class="menucats">';
while($row = mysql_fetch_assoc($result)){
echo '<li>'.$row['catname'].' <a href="?up='.$row['id'].'&nummer='.$row['nummer'].'"><img src="../images/arrowu.gif" border="0" alt="Omhoog"></a> <a href="?down='.$row['id'].'&nummer='.$row['nummer'].'"><img src="../images/arrowd.gif" border="0" alt="Omlaag"></a></p>';
}
echo '</ul>';
}
else{
trigger_error(mysql_error());
}
//Credits Robert (PHPHulp, http://www.phphulp.nl/php/scripts/3/832/)
?>
De CSS ga je zelf moeten maken ;)
Normaal gezien meot dit werken.
Ik heb de code juist een beetje aangepast aan jouw vraag:)
Mvg Jens
Gewijzigd op 01/01/1970 01:00:00 door Jens V