Andreas: Position immer automatisch setzen

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

  1. 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

    1. 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;
      }
      ?>

      1. 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

        1. 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

          1. 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

            1. 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>

              1. 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

                1. Hallo,

                  1. 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];
                  ?>

                  1. 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

                  1. 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">

                  1. 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

                    1. 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

                    1. $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/

                      1. 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

                        1. 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];

                          1. 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

                            1. 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

                              1. 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

                                1. 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:-)

                                  1. 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

                                    1. 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?

              2. 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

                1. 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*

                2. 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?