AsaMedlem sedan dec. 20011 860 inlägg Jag skulle behöva en funktion som gör att jag kan ha en meny som man kan via en adminsida lägga till kategorier med underkategorier. Det ska kunna gå att ha oöndligt många understeg.
Någon som har en sådan färdig funktion eller har lust att hjälpa mig med detta?
kategorier:
kategoriID - int
kategori - varchar
tkategoriID - int
AsaMedlem sedan dec. 20011 860 inlägg Det ska även se ut så här:
1 - Huvudmeny 1 - 0
2 - Undermeny under 1.1 - 1
3 - Undermeny under 1.2 - 1
4 - Undermeny under 1.3 - 1
5 - Undermeny under 3.1 - 3
6 - Undermeny under 3.2 - 3
7 - Undermeny under 6 - 6
8 - Undermeny under 3.3 - 3
9 - Undermeny under 3.4 - 3
10 - Huvudmeny 2 - 0
11 - Undermeny - 10
aasahMedlem sedan mars 20034 471 inlägg
Asa skrev:
Det ska även se ut så här:
1 - Huvudmeny 1 - 0
2 - Undermeny under 1.1 - 1
3 - Undermeny under 1.2 - 1
4 - Undermeny under 1.3 - 1
5 - Undermeny under 3.1 - 3
6 - Undermeny under 3.2 - 3
7 - Undermeny under 6 - 6
8 - Undermeny under 3.3 - 3
9 - Undermeny under 3.4 - 3
10 - Huvudmeny 2 - 0
11 - Undermeny - 10
Hur det ser ut styr du lämpligen via CSS, genom att sätta olika CSS-klasser beroende på djup. Jag skulle nog byggt upp den där menyn via arv, men eftersom du säkert har en modernare PHP än jag kan jag inte visa kod för det.
K@llenMedlem sedan mars 20032 667 inlägg En rekursiv funktion är vad du är ute efter, dvs en funktion som anropar sig själv. Vet att det finns bra exempel här på wF.
AsaMedlem sedan dec. 20011 860 inlägg Hittade några men de skriver unte ut med mellanslag så det ser bra ut.
function menu($child_of){
if (!isset($child_of)){
$child_of = 0;
}
$SQL = "SELECT kategoriID, kategori, tkategoriID FROM kategorier WHERE tkategoriID = " . $child_of . "";
$result = mysql_query($SQL) or die(mysql_error());
while ($data = mysql_fetch_array($result)){
echo $data[1]."<br>";
menu($data[0]);
}
}
echo menu(0);
Skrivs ut så här nu:
1 - Huvudmeny 1 - 0
2 - Undermeny under 1.1 - 1
3 - Undermeny under 1.2 - 1
4 - Undermeny under 1.3 - 1
5 - Undermeny under 3.1 - 3
6 - Undermeny under 3.2 - 3
7 - Undermeny under 6 - 6
8 - Undermeny under 3.3 - 3
9 - Undermeny under 3.4 - 3
10 - Huvudmeny 2 - 0
11 - Undermeny - 10
aasahMedlem sedan mars 20034 471 inlägg
Asa skrev:
Hittade några men de skriver unte ut med mellanslag så det ser bra ut.
Du kan inte använda mellanslag för att få bra resultat i HTML - HTML struntar nämligen blankt i hur många mellanslag du stoppar in. Det blir bara ett mellanslag i alla fall.
//I CSS - tex
.menu0{
padding:0px;
margin:0px;}
.menu1{
padding:2px;
margin:2px;}
.menu2{
padding:4px;
margin:4px;}
//.............
//I PHP
function menu($child_of){
if (!isset($child_of)){
$child_of = 0;
}
$SQL = "SELECT kategoriID, kategori, tkategoriID FROM kategorier WHERE tkategoriID = " . $child_of . "";
$result = mysql_query($SQL) or die(mysql_error());
while ($data = mysql_fetch_array($result)){
echo '<div class="menu'.$level.'">'.$data[1];
echo $level."</div><br>";
menu($data[0]);
}
}
AsaMedlem sedan dec. 20011 860 inlägg Men alltså. Visst idén är bra men då måste man ju loopa i stilmallen oxå för att få alla menu utskrivna. Fler tips?
level ska inte vara med i min kod...
aasahMedlem sedan mars 20034 471 inlägg
Asa skrev:
Men alltså. Visst idén är bra men då måste man ju loopa i stilmallen oxå för att få alla menu utskrivna. ...
Va? :q Nej, det sätts ju direkt i foreach-slingan som du redan gör. Här väljs vilken class som används: (första raden i while)
echo '<div class="menu'.$level.'">'.$data[1];
AsaMedlem sedan dec. 20011 860 inlägg Nu förstår vi nog varandra fel..
Man måste ju lägga in stilmallen oxå i en forloop på nå vis för att slippa skriva det manuellt. Sen level är inget som skall finnas i den koden jag har elelr som du ändrat i.
TravoniMedlem sedan okt. 20041 556 inlägg Hur många "hundra" underkategorier skall du ha då? Enligt min erfarenhet så behövs sällan fler än 5 stycken men det är såklart beroende på vad man skall göra.
I annat fall kan du ju istället för att använda class skriva ut värdet direkt:
Pseudosyntax:
echo '<div style="padding:'.($level*2).'px;margin:'.($level*2).'px">'.$data[1];
AsaMedlem sedan dec. 20011 860 inlägg Jag vet inte hur många som behövs. SKa testa det du skrev nu.. Finns ju de som vill ha många underkategorier.. vem vet.. Jag hjälper ju andra med detta då och då men denna gången visste jag ej hur jag skulle göra.
AsaMedlem sedan dec. 20011 860 inlägg Detta:
function menu($child_of){
if (!isset($child_of)){
$child_of = 0;
}
$SQL = "SELECT kategoriID, kategori, tkategoriID FROM kategorier WHERE tkategoriID = " . $child_of . "";
$result = mysql_query($SQL) or die(mysql_error());
while ($data = mysql_fetch_array($result)){
echo '<div style="padding-left:'.($data[0]*2).'px;margin-left:'.($data[0]*2).'px">'.$data[2].'-'.$data[1].' - ID - '.$data[0].'</div>';
menu($data[0]);
}
}
echo menu(0);
skrev ut det så här.. helt fel..
0-Datorer - ID - 1
1-Stationära - ID - 2
2-HP - ID - 5
0-Skrivare - ID - 3
3-Laser - ID - 4
4-Canon - ID - 6
ska bli:
0-Datorer - ID - 1
1-Stationära - ID - 2
2-HP - ID - 5
0-Skrivare - ID - 3
3-Laser - ID - 4
4-Canon - ID - 6
Jag tycker mer att menyn ser ut som nästlade listor istället för en massa div-taggar, men du kanske har dina anledningar till att inte använda listor? :)
Annars, som listor (med reservation för att hjärnan går på halvfart tidiga måndagmorgnar och att jag inte kan testa PHP-funktionen):
function menu($child_of) {
if (!isset($child_of)) {
$child_of = 0;
}
if ($child_of === 0)
echo "<div id=\"menu\">\n";
$SQL = "SELECT kategoriID, kategori, tkategoriID FROM kategorier WHERE tkategoriID = " . $child_of . "";
$result = mysql_query($SQL) or die(mysql_error());
$nItems = 0;
while ($data = mysql_fetch_array($result)) {
if ($nItems === 0)
echo "<ul>\n";
echo "<li>" . $data[1];
menu($data[0]);
echo "</li>\n"
$nItems++;
}
if ($nItems > 0)
echo "</ul>\n";
if ($child_of === 0)
echo "</div>\n";
}
echo menu(0);
och
#menu ul,
#menu li {
list-style: none;
margin: 0;
padding: 0;
}
#menu ul li {
padding-left: 20px;
}
eller liknande för presentationen.
AsaMedlem sedan dec. 20011 860 inlägg Det var nån annan dom tyckte div skulle vara bättre men självklart är listor bättre. Tackar för snabbt svar. Ska testa och återkommer.
AsaMedlem sedan dec. 20011 860 inlägg Ta bort div helt och hållet. Det vore bra. Men det funkar iallafall finfint :) Du hade missat en ; på denna raden echo "</li>\n"