Position immer automatisch setzen
Andreas
- php
Ich probiere es noch einmal.
Hallo,
ich lasse aus der DB max. 6 Menüpunkte auslesen,
je nach dem was als Aktiv aktiviert worden ist.
Menü1 | Menü2 | Menü3 | Menü4 | Menü5 | Menü6
$menue_check = mysql_query("select count(*) from wsc_menu where hnr='$hnr'
and aktiv='1'");
$menucount = mysql_result($menue_check,0);
//sind zb. nur 3 Aktivert wird das Menü rechtsbündig dargestellt der rest
mit Leeraum gefüllt
L E E R R A U M | Menü2 | Menü4 | Menü6
Das klappt auch alles
Jetzt komt mein Problem
zu jedem Haubtmenü gibt ein Submenü das genau darunter angezeigt werden
soll.
Es sind somit nie alle Submenü gleichzeitig zu sehen,
immer nur das das zu dem Haubtmenüpunkt passt wenn man mit der Maus drüber
fährt.
geht man über Menü2:
L E E R R A U M | Menü2 | Menü4 | Menü6
submenü2
geht man über Menü4:
L E E R R A U M | Menü2 | Menü4 | Menü6
submenü4
...
So das Menü hat eine gesamt Länge von 750 Pixel
Je Menüpunkt ist somit 130 Pixel breit
wie schaffe ich es das das Submenü immer unter dem Haubtmenüpunkt zu sehen
ist
das ist mein Ansatz der nicht sauber funzt:
Ich übergebe einmal die ID der einzelnen Menüpunkte = $menudata[$menuid]
und lasse die Anzahl der menüpunkte zählen = $menucount z.B. 3 Stück
Menü1 = menuid = 1
Menü2 = menuid = 2
Menü3 = menuid = 3
Menü4 = menuid = 4
Menü5 = menuid = 5
Menü6 = menuid = 6
= $menudata[$menuid]
for ($j=1; $j<$menudata[$menuid]; $j++)
{
$left=750-(130*$menucount);
}
wer hat eine Idee mit Beispiel?
Danke
Hi,
for ($j=1; $j<$menudata[$menuid]; $j++)
{
$left=750-(130*$menucount);
}
Versuch statt $j<$menudata[$menuid] -> $j<count($menudata)
und
$left = 130*$j;
Gruß
ueps
Hallo
habe ich probiert,
da passiert gar nichts
Mit folgender Einstellung wird das Submenü angezeigt,
nur nicht richtig unter dem Hauptmenüpunkt.
<?
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu
where hnr='$hnr'
group by menuid, hnr ");
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$j;
}
?>
Mit folgender Einstellung wird das Submenü angezeigt,
nur nicht richtig unter dem Hauptmenüpunkt.
<?
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu
where hnr='$hnr'
group by menuid, hnr ");
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$j;
}
?>
Ah, da hab ich was falsch vesrtanden, du positionierst jeden Submenüpunkt in der FOR-Schleife.
Deshalb darfs du $j nicht als Bezug für left nehmen.
Statt $j musst du die aktuelle Menünummer nehmen.
d.h. wenn du z.B. nur 3 Menüs anzeigen lässt, musst du Fürs erste Menü 1 nehmen auch wenn deine MenüID höher ist...
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
$menuposition++;
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menuposition;
}
So in etwa
Hallo,
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
$menuposition++;
Wie ermittelst DU menuposition
Ist das mein $menucount z.B. 3 Stück?
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menuposition;
}
Sowie ich $j weg nehme, bleiben alle Submenü an eine Stelle fest stehen. Das heißt Submenü3 hat die gleiche Position wie Submenü4
Hi,
$menuposition++;
Wie ermittelst DU menuposition
Ist das mein $menucount z.B. 3 Stück?
Für jedes _angezeigte_ Hauptmenü wird die position um eins erhöht.
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menuposition;
}
Sowie ich $j weg nehme, bleiben alle Submenü an eine Stelle fest stehen. Das heißt Submenü3 hat die gleiche Position wie Submenü4
Kannst du mir mal den gesamten Code zeigen? Währe nicht schlecht wenn ich mal sehen könnte was du mit $left usw. sonst noch machst.
Gruß
ueps
HAllo
hier mein GesamtScript
<? //Anzahl der Menüpunkte
$menue_check = mysql_query("select count(*) from wsc_menu where aktiv='1'");
$menucount = mysql_result($menue_check,0);
?>
<?//Nur die Aktiven Hauptmenüpunkte menuid ausgeben lassen zum übergeben für SUBMENÜ
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu where hnr='$hnr' group by menuid, hnr ");
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menucount;
$height=1+14*$menudata[$j];
?>
//Layer anzeige ja nach Hauptmenüpunkt
<div id="Layer<? echo $j;?>" style="position:absolute; left:<? echo $left;?>px; visibility: hidden">
<table>
<?
$select_submenu = mysql_query("SELECT * FROM wsc_submenu where menuid='$j' and aktiv='1'");
while ($zeile = mysql_fetch_array($select_submenu))
{
echo "<tr><td><a href="#">".$zeile["submenu"]."</a></td></tr>";
}
?>
</table>
</div>
<?
}
?>
//Hauptmenüpunkte anzeigen lassen
<table>
<tr>
<td class="blank<? echo $menucount;?>"> </td>
<?
$menue_select = mysql_query("select * from wsc_menu where aktiv='1' order by menuid");
while($zeile = mysql_fetch_array($menue_select))
{
echo "<td><a href="#" class="men" onMouseOver="MM_showHideLayers(";
if($zeile["menuid"]== 2)
{
echo "'Layer2','','show','Layer3','','hide','Layer4','','hide','Layer5','','hide'";
}
elseif($zeile["menuid"]== 3)
{
echo "'Layer2','','hide','Layer3','','show','Layer4','','hide','Layer5','','hide'";
}
elseif($zeile["menuid"]== 4)
{
echo "'Layer2','','hide','Layer3','','hide','Layer4','','show','Layer5','','hide'";
}
elseif($zeile["menuid"]== 5)
{
echo "'Layer2','','hide','Layer3','','hide','Layer4','','hide','Layer5','','show'";
}
else
{
echo "'Layer2','','hide','Layer3','','hide','Layer4','','hide','Layer5','','hide'";
}
echo ")">".$zeile["menu"]."</a></td>";
}
?>
</tr>
</table>
Hi,
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
1. Woher kommt $menuid? Dieser Wert wird nirgendwo gesetzt, etwa aus der Datenbankabfrage?
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menucount;
$height=1+14*$menudata[$j];
?>
2. Du willst doch die Menüs unter den Hauptmenüs dartsellen?
Warum ist den deine Höhe (height) ein Varibaler Wert? Die höhe
sollte doch dann bei allen Submenüs gleich sein.
3. Der Left Wert hingegen ist Statisch, da $menucount nur zu beginn
des Scripts gesetzt wird, deshalb klappt die anzeige auch nicht.
Hier müsste ein Variabler Wert hin, der die Position, des aktuellen Hauptmenüs enthält!
//Layer anzeige ja nach Hauptmenüpunkt
<div id="Layer<? echo $j;?>" style="position:absolute; left:<? echo $left;?>px; visibility: hidden">
4. die id von den Sub Layern, beginnt ja immer mit 1, wenn menü1 jedoch nicht aktiv ist, hat das Submenü von Menü2 auch die id Layer1.
ueps
Hallo,
- Woher kommt $menuid? Dieser Wert wird nirgendwo gesetzt, etwa aus der Datenbankabfrage?
Richtig
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menucount;
$height=1+14*$menudata[$j];
?>
- Du willst doch die Menüs unter den Hauptmenüs dartsellen?
Warum ist den deine Höhe (height) ein Varibaler Wert? Die höhe
sollte doch dann bei allen Submenüs gleich sein.
Auch die Submenüpunkte werden aus der DB ausgelsen so kann dies sich auch verändern, deswegen die HÖHE
- Der Left Wert hingegen ist Statisch, da $menucount nur zu beginn
des Scripts gesetzt wird, deshalb klappt die anzeige auch nicht.
Hier müsste ein Variabler Wert hin, der die Position, des aktuellen Hauptmenüs enthält!
Ja die muß ich doch erst einmal ermiiteln, Wie?
//Layer anzeige ja nach Hauptmenüpunkt
<div id="Layer<? echo $j;?>" style="position:absolute; left:<? echo $left;?>px; visibility: hidden">
- die id von den Sub Layern, beginnt ja immer mit 1, wenn menü1 jedoch nicht aktiv ist, hat das Submenü von Menü2 auch die id Layer1.
Allso wenn ich menü1 deaktivier un mit der Maus über den menü2 gehe erhalte ich auch passend den Layer2
Mit den Layer klappt auch alles, nur die Positionierung stimmt nicht
- Der Left Wert hingegen ist Statisch, da $menucount nur zu beginn
des Scripts gesetzt wird, deshalb klappt die anzeige auch nicht.
Hier müsste ein Variabler Wert hin, der die Position, des aktuellen Hauptmenüs enthält!
Ja die muß ich doch erst einmal ermiiteln, Wie?
Da wo $menudata[$menuid] = $zeile["menuid"] gesetzt wird,
machst du ($cnt vorher noch auf -1 setzen):
$cnt++;
$menupos[$menuid]=$cnt;
In der besgaten FOR-Schleife dann so:
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menupos[$j];
$height=1+14*$menudata[$j];
Probiers einfach mal.
ueps
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu
where hnr='$hnr'
group by menuid, hnr ");
$cnt-1;
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
$cnt++;
$menupos[$menuid]=$cnt;
}
for ($j=1; $j<($menudata[$menuid]); $j++)
{
$left=130*$menupos[$j];
$height=1+14*$menudata[$j];
hier das Ergebnis
http://www.telering.de/temp_haendler/
hier das Ergebnis
http://www.telering.de/temp_haendler/
Also im Quelltext, sind weder left noch height mit den richtigen Werten gefüllt, kann sein das es daran liegt das du bei der FOR-Schleife mit 1 beginnst, obwohl des erste Menü leer ist.
Probiers nochmal so (ohne extra $menupos!):
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu
where hnr='$hnr'
group by menuid, hnr ");
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
for ($j=min($menudata); $j<=max($menudata); $j++)
{
$left=130*$j;
$height=1+14*$menudata[$j];
Vorher wurde z.B. auf menudata[1] zugegriffen obwohl es den wert gar nicht gibt.
Try again :-)
ueps
Hallo
jetzt wird kein Submenü angezeigt
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu
where hnr='$hnr'
group by menuid, hnr ");
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
for ($j=min($menudata); $j<=max($menudata); $j++)
{
$left=130*$j;
$height=1+14*$menudata[$j];
Hi,
jetzt wird kein Submenü angezeigt
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu
where hnr='$hnr'
group by menuid, hnr ");
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
for ($j=min($menudata); $j<=max($menudata); $j++)
{
$left=130*$j;
$height=1+14*$menudata[$j];
Nicht ganz, Layer4 ist vorhanden, aber immerhin steht jetzt in left der richtige Wert. Nähmlich -> left:520px was für layer4 auch stimmen würde.
Machs halt nochmal normal wie vorhin, und lass $left=130*$j stehen,
mal sehn was dann rauskommt.
ueps
HAllo
Alter Stand
$menuid_count = mysql_query("SELECT menuid FROM wsc_submenu
where hnr='$hnr'
group by menuid, hnr ");
while ($zeile = mysql_fetch_array($menuid_count))
{
$menudata[$menuid]=$zeile["menuid"];
}
for ($j=1; $j<$menudata[$menuid]; $j++)
{
$left=130*$j;
$height=1+14*$menudata[$j];
ANdreas
Hi,
Alter Stand
.
.
.
for ($j=1; $j<$menudata[$menuid]; $j++)
{
$left=130*$j;
$height=1+14*$menudata[$j];
Jetzt gehts doch, zumindest bei mir, das einzige was du noch tun musst ist $left = 130*($j-1); zu schreiben, dann ist es genau unter dem Hauptmenü.
Gruß
ueps
Hallo
so jetzt funzt es bis auf
schau selbts
das Menü wenn es 5 Menüpunkte hat ist alles OK nur wird es weniger als 5 hat stimmt es wieder nicht, kann man das extra abfragen.
leider weiß ich nicht wie
D A N K E:-)
Hi,
das Menü wenn es 5 Menüpunkte hat ist alles OK nur wird es weniger als 5 hat stimmt es wieder nicht, kann man das extra abfragen.
Könnte man schon machen, aber überprüf doch noch mal bitte,
die FOR-Schleife, ich glaube da steht For ($j=1;$j<$menu...
mach da mal <= draus, und schau nochmal.
Du kannst aber auch die CSS Methode nehmen die etwas weiter oben von
Sven Rautenberg gepostet wurde, wenn die Hauptmenüs immer am gleichen Fleck stehen´.
Gruß
ueps
Hallo,
nee, geht immer noch nicht
for ($j<=1; $j<$menudata[$menuid]; $j++)
{
$left=130*($j-1);
Du kannst aber auch die CSS Methode nehmen die etwas weiter oben von Sven Rautenberg gepostet wurde, wenn die Hauptmenüs immer am gleichen Fleck stehen´.
Ja wenn es statisch ist aber das Menü kann mal bei 130px sein aber auch aber auch mal 390px
schon stimmt was nicht, ausser ich muß es immer wieder abfragen oder nur wie?
Moin!
//Layer anzeige ja nach Hauptmenüpunkt
<div id="Layer<? echo $j;?>" style="position:absolute; left:<? echo $left;?>px; visibility: hidden">
Wenn du weißt, daß der Menülayer die ID "Layer1" bis "LayerX" besitzt, warum bindest du dann nicht einfach ein externes CSS ein, welches für die IDs entsprechende Positionen definiert?
#Layer1 { position:absolute; left:0px; /*usw...*/ }
#Layer2 { position:absolute; left:130px; /*usw...*/ }
#Layer3 { position:absolute; left:260px; /*usw...*/ }
#Layer4 { position:absolute; left:390px; /*usw...*/ }
#Layer5 { position:absolute; left:520px; /*usw...*/ }
Ist viel einfacher und funktioniert sogar - sofern deine restliche HTML-Ausgabe korrekt ist.
- Sven Rautenberg
Tacg auch,
Wenn du weißt, daß der Menülayer die ID "Layer1" bis "LayerX" besitzt, warum bindest du dann nicht einfach ein externes CSS ein, welches für die IDs entsprechende Positionen definiert?
#Layer1 { position:absolute; left:0px; /*usw...*/ }
#Layer2 { position:absolute; left:130px; /*usw...*/ }
#Layer3 { position:absolute; left:260px; /*usw...*/ }
#Layer4 { position:absolute; left:390px; /*usw...*/ }
#Layer5 { position:absolute; left:520px; /*usw...*/ }
Ist viel einfacher und funktioniert sogar - sofern deine restliche HTML-Ausgabe korrekt ist.
Stimmt, die Menüs sind ja eh immer am gleichen Fleck!
Das ich nicht daran gedacht hab *grummel*
Hallo
#Layer1 { position:absolute; left:0px; /*usw...*/ }
#Layer2 { position:absolute; left:130px; /*usw...*/ }
#Layer3 { position:absolute; left:260px; /*usw...*/ }
#Layer4 { position:absolute; left:390px; /*usw...*/ }
#Layer5 { position:absolute; left:520px; /*usw...*/ }
Ist viel einfacher und funktioniert sogar - sofern deine restliche HTML-Ausgabe korrekt ist.
Ja wenn es statisch ist aber das menü kann mal bei 130px sein aber auch aber auch mal 390px
schon stimmt was nicht, ausser ich muß es immer wieder abfragen oder?