De weergave pagina voor de menu:
<?
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:
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;
Om de volgorde van de cats te wijzigen:
<?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/)
?>
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