webForumDet fria alternativet

Hjälp med meny på flera steg men enbart ?cat=xxx

PHP

1 svar · 911 visningar · startad av Asa

Medlem sedan dec. 20011 860 inlägg
Frågan#1
<ul class="simple-nav">
	<li class="current"><a href="item.php?cat=1">Beten</a> </li>
	<ul>
		<li><a href="item.php?cat=6" class="current">Jerkbait</a></li>
		<ul>
			<li><a href="item.php?cat=9" class="current">Buster jerk</a></li>
			<ul>
				<li><a href="item.php?cat=14" class="current">Buster Jerk - 7cm</a></li>
				<li><a href="item.php?cat=15">Buster Jerk - 11 cm</a></li>
            </ul>
			<li><a href="item.php?cat=10">Jeff Boggs</a></li>
			<li><a href="item.php?cat=11">ProLogic</a></li>
			<li><a href="item.php?cat=12" class="none">Rapala</a></li>
			<li><a href="item.php?cat=13">SavageGear</a></li>
		</ul>
		<li><a href="item.php?cat=7">Rullar</a></li>
		<li><a href="item.php?cat=8">Spö</a></li>
	</ul>
	<li><a href="item.php?cat=2">Flugfiske</a></li>
	<li><a href="item.php?cat=3">Trolling</a></li>
	<li><a href="item.php?cat=4">Havsfiske</a></li>
	<li><a href="item.php?cat=5">Kläder</a></li>	
</ul>

Har utseende för en meny jag har och vill göra så att för varje steg man klickar in på så hålls menyn öppen.
Har suttit och hållt på ett tag med detta men det jag gjort vill inte fungera. Alla huvudkategorier blir öppna och
jag kan öppna nivå 2 genom att klicka på nivå 1 och sen när jag klickar på nivå 3 stängs det ihop.
Vet ej hur jag ska lösa detta.

klassen current är att den är aktiv och klassen none visar att den ej har någon underkategori.

Kategoritabellen ser ut så här:

tbl_kategori
     kategoriID
     kategori
     tkategoriID

Huvudkategorin Nivå 1 har tkategoriID 0 och kategoriID 1 medans Nivå 2 har i menyn ovans fall tkategoriID 1 och kategoriID 6 och Nivå 3 har tkategoriID 6 och kategoriID 9 och exempel 1 i Nivå 4 har tkategoriID 9 och kategoriID 14

Här är min kod:

<?php
$katID = "";
$rad   = "";
$rad1  = "";
$rad2  = "";
$rad3  = "";
$rad4  = "";

$katID = fixSQL($_GET['cat']);
$sql1 = mysql_query("SELECT kategori,tkategoriID,kategoriID FROM tbl_kategorier Where kategoriID=$katID") or die(mysql_error());
$rad1 = mysql_fetch_array($sql1);

$sql2 = mysql_query("SELECT kategori,tkategoriID,kategoriID FROM tbl_kategorier Where kategoriID=".$rad1['tkategoriID']) or die(mysql_error());
$rad2 = mysql_fetch_array($sql2);

if (mysql_num_rows($sql2) != 0){
	$sql3 = mysql_query("SELECT tkategoriID,kategoriID FROM tbl_kategorier Where kategoriID=".$rad2['tkategoriID']) or die(mysql_error());
	$rad3 = mysql_fetch_array($sql3);
	if (mysql_num_rows($sql3) != 0){
		$sql4 = mysql_query("SELECT tkategoriID,kategoriID FROM tbl_kategorier Where kategoriID=".$rad3['tkategoriID']) or die(mysql_error());
		$rad4 = mysql_fetch_array($sql4);
	}
}
?>

<ul class="simple-nav">
	<?php
	// Nivå 1
	$query = "SELECT kategoriID,kategori FROM tbl_kategorier Where tkategoriID=0 ORDER BY sort";
	$result = mysql_query($query, $conn);
	while ($RS=mysql_fetch_array($result)) {?>
		<li><a href="itemsx.php?cat=<?php echo $RS['kategoriID'];?>"><?php echo $RS['kategori'];?></a> </li>
		
		<?php
		// Nivå 2
		$antalUnder2 = mysql_num_rows(mysql_query("SELECT kategoriID FROM tbl_kategorier Where tkategoriID=".$RS['kategoriID']." ORDER BY kategori"));
		if($antalUnder2 > 0){ //  HÄR SKA NÅGOT IN.....
			echo "<ul>";
			$query2 = "SELECT kategoriID,kategori FROM tbl_kategorier Where tkategoriID=".$RS['kategoriID']." ORDER BY kategori";
			$result2 = mysql_query($query2, $conn);
			while ($RS2=mysql_fetch_array($result2)) {
				$antalUnder3 = mysql_num_rows(mysql_query("SELECT kategoriID FROM tbl_kategorier Where tkategoriID=".$RS2['kategoriID']." ORDER BY kategori"));?>
				<li><a href="itemsx.php?cat=<?php echo $RS2['kategoriID'];?>"<?php if($rad2['kategoriID'] == $RS2['kategoriID']){?> class="current"<?php }?><?php if($antalUnder3 == 0){?> class="none"<?php }?>><?php echo $RS2['kategori'];?></a></li>
					
				<?php
				// Nivå 3
				if($antalUnder3 > 0 && $rad1['kategoriID'] == $RS2['kategoriID']){ //  HÄR SKA NÅGOT IN.....
					echo "<ul>";
					$query3 = "SELECT kategoriID,kategori FROM tbl_kategorier Where tkategoriID=".$RS2['kategoriID']." ORDER BY kategori";
					$result3 = mysql_query($query3, $conn);
					while ($RS3=mysql_fetch_array($result3)) {
						$antalUnder4 = mysql_num_rows(mysql_query("SELECT kategoriID FROM tbl_kategorier Where tkategoriID=".$RS3['kategoriID']." ORDER BY kategori"));?>
			           	<li><a href="itemsx.php?cat=<?php echo $RS3['kategoriID'];?>"<?php if($rad1['kategoriID'] == $RS3['kategoriID']){?> class="current"<?php }?> class="none"><?php echo $RS3['kategori'];?></a></li>

						<?php
						// Nivå 4
						if($antalUnder4 > 0 && $rad2['kategoriID'] == $RS3['kategoriID']){ //  HÄR SKA NÅGOT IN.....
							echo "<ul>";
							$query4 = "SELECT kategoriID,kategori FROM tbl_kategorier Where tkategoriID=".$RS3['kategoriID']." ORDER BY kategori";
							$result4 = mysql_query($query4, $conn);
							while ($RS4=mysql_fetch_array($result4)) {?>
					           	<li><a href="itemsx.php?cat=<?php echo $RS4['kategoriID'];?>"<?php if($rad1['kategoriID'] == $RS4['kategoriID']){?> class="current"<?php }?> class="none"><?php echo $RS4['kategori'];?></a></li>
								<?php					
							}
							echo "</ul>"; 
						}
						// Nivå 4 - slut
				
					}
					echo "</ul>"; 
				}
				// Nivå 3 - slut
					
			}
			echo "</ul>";
			
		}
		// Nivå 2 - slut
	}
	// Nivå 1 - slut
	?>
</ul>
Medlem sedan juni 20123 inlägg
#2

Tror det skulle vara enklare att sätta ett "Parent ID" istället för bara vilken nivå menyn ligger i. Du kan då fråga om denna menyn är parent till någon annan, och om den i sin tur är parent åt någon ytterligare nivå. Om det är sant visar du menyerna.

Om jag förstått det hela rätt också så skriver du endast ut menyer som ska visas? Ett förslag är då också att dölja menyer med hjälp av CSS istället för att inte skriva ut dem. Då kan du enkelt tilldela klasser på de som ska synas, och kraftigt reducera ditt antal mysql-anrop.

271 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)