[Funktion] Menü-Funktion ein wenig umfunktionieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Funktion] Menü-Funktion ein wenig umfunktionieren

    Hallo (dies ist mein erster Post in diesem Forum ),

    Ich habe in einem anderem Forum diese Menüfunktion für ein Menü mit 3 Ebenen aus der Datenbank erhalten:

    PHP-Code:
    function build_menue($ak_id,$child_id){

        if (
    $ak_id>0){
            
    $query="select parent from ftv_menu where id=".$ak_id;
            
    $erg=mysql_query($query) or die (mysql_error());
            
    $row=mysql_fetch_row($erg);
            
    build_menue($row[0],$ak_id);}

        
    $query="select name,id, action from ftv_menu where parent=".$ak_id;
        
    $erg=mysql_query($query) or die (mysql_error());
        while(
    $row=mysql_fetch_assoc($erg))
            {
            
    $name=$row['name'];
            if (
    $row['id']==$child_id)
                {
                
    $name="<span class='navheadline0' style='font-weight: bold;'>".$name."</span>";
                }
            echo 
    "<a a class='navheadline0' href='?id=".$row['id']."&action=".$row['action']."'>".$name."</a>".":::";

            }
        echo 
    "<br>";
    }

    $klickid=(int) $_GET["id"];

    build_menue($klickid,1); 
    Dies gibt ein Menü in der Form dieser Seite aus: http://www.ftv1860badminton.de/

    Allerdings hat es einen Schönheitsfehler:
    Es werden nicht alle 3 Ebenen gleichzeitig ausgeben, sondern man muss sich durch klicken von oben nach unten durchhangeln.

    Nun habe ich bereits den Tipp bekommen, dass man in der Datenbank ein Feld "Vorauswahl" angeben könnte und damit im Script dann die nächsten Ebenen laden kann.

    Allerdings habe ich keine Ahnung, wo ich in der Funktion die Vorauswahl einbauen soll.

    Wäre schön wenn jemand eine Idee dazu hätte

  • #2
    hmm, ich würde für jede menü ebene erst einmal eine db tabelle anlegen, ist übersichtlicher und einfacher zu handhaben find ich

    Kommentar


    • #3
      Und dann würdest du mit Hilfe von Querverweisen die jeweils passenden Unterpunkte suchen, oder wie?

      Kommentar


      • #4
        select ebene1

        select ebene2 where ebene1 id = ...

        select ebene3 where ebene1_id = ... and ebene2_id = ...

        Kommentar


        • #5
          das ist ineffizient.

          welche datenstruktur verwendest du? adjacency list model? dann kannst du ja bereits mit
          Code:
          SELECT ... ORDER BY pid, id
          alle ebenen geordnet selektieren.

          Kommentar


          • #6
            Aber könnte man nicht in einer DB-Tabelle einfach eine Spalte "Level" definieren und darüber das ganze regeln?

            Weil 3 Tabellen sieht sehr unschön aus.

            Kommentar


            • #7
              ist es auch, aber "level" ist insofern nicht notwendig, als dass es zu inkonsistenzen führen kann. du kannst ja, wenn du das array zur ausgabe durchläufst, genau verfolgen, in welcher ebene du dich genau befindest.

              schau dir an, was pma auf die query ausgibt.

              Kommentar


              • #8
                Ist vielleicht ne dumme Frage, aber "pma"?

                Und warum kann "level" zu Inkonsistenzen führen?

                Kommentar


                • #9
                  Original geschrieben von TheTommynator
                  [B]Ist vielleicht ne dumme Frage, aber "pma"?
                  PHPMyAdmin
                  Freedom is a state of mind. Not a state in which we live.

                  troxdev.ch | animefieber

                  Kommentar


                  • #10
                    stell dir vor: durch einen fehler erhält der allererste eintrag mit id=1, pid=0 den level-wert: 32 (alle anderen sind 1, 2 und 3). kannst du dir sicher sein, dass sich deine applikation trotzdem korrekt verhält? das ist einfach eine potentielle fehlerquelle ohne neue information.

                    Kommentar


                    • #11
                      Aso!

                      ok, dann werd ich's mal mit den unterschiedlichen Tabelle probieren.

                      Mal schauen, ob's klappt.

                      Kommentar


                      • #12
                        die idee ist schon klar, nenn sie level oder indent. schau dir die sql-bibel von joe celco an, er schreibt ganz interessant darüber.

                        und nein, probiere es _nicht_ mit verschiedenen tabellen. wozu soll das gut sein?

                        Kommentar


                        • #13
                          Gut, dann werde ich diesen Lösungsansatz probieren.

                          Den hatte ich bereits schon mal versucht, aber es ist an den Links gescheitert.

                          Das Problem damals war, dass mein Script ja wissen muss, welche Ebenen zusammen gehören.

                          Und wenn ich einen Link in der untersten Ebene angeklickt hatte, wusste das Script nicht mehr, welche darüber liegende Ebene dazugehört usw.

                          Vielleicht hätte jemand noch einen Lösungsansatz dafür, dass das Script auch einem Klick auf einen Link noch weiß, welche Ebenen dazu gehören.

                          Kommentar


                          • #14
                            jeder menüpunkt hat auch noch das feld "pid", nicht wahr?

                            Kommentar


                            • #15
                              Wenn ich es so anlege

                              D.h. Ich muss sowohl eine pid als auch eine Child-Id angeben um dann die Beziehung daraus berechnen zu können?

                              Kommentar

                              Lädt...
                              X