Kann meine Navi nicht erweitern

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

  • Kann meine Navi nicht erweitern

    Hi @ all,

    habe mir ein neues System gebastelt mit einer Navi die auch
    Unterkategorien unetrstützt. Wollte das auf eine 3. oder 4. Ebene
    darunter erweitern aber mir fällt ein weiteres Kriterium nicht ein zum Filtern
    der Einträge in der DB. Bei jedem Artikel wird die Rubrik_ID mit
    reingeschrieben damit eine Zuordnung stattfindet.

    DB :
    ----------------------------------------------------------------
    rubrik_id | rubrik | top_rub | sub_rub
    ----------------------------------------------------------------
    1 | Prozessoren | 0 | ja
    2 | AMD | 1 |
    3 | Ahtlon XP | 2 |
    4 | Ahtlon Mobile | 2 |


    mysql_db:
    PHP-Code:
    $res = mysql_db_query($dbase, "select * from rubrik 
               where top_rub = 0 order by rubrik");
    $num = mysql_num_rows($res);
    for ($i=0; $i<$num; $i++)
                {
        $rubrik = mysql_result($res, $i, "rubrik");
        $top_rub = mysql_result($res, $i, "top_rub");
        $sub_rub = mysql_result($res, $i, "sub_rub");
        $artikel_id = mysql_result($res, $i, "rubrik_id");

        if ($sub_rub != 'ja' and $artikel_id != $nav)
            {?>
        <a href="show_shop.php?rb=<?php echo $artikel_id?>
             &nav=<?php echo $artikel_id?>&left=j"><?= $rubrik ?></a>
            <?php }
        if (
    $sub_rub != 'ja' and $artikel_id == $nav)
            { 
    ?>
                      <?= $rubrik ?>
             <?php }
        if (
    $sub_rub == 'ja' and $nav != $artikel_id)
            {
    ?>
            <a href="show_shop.php?rb=<?php echo $artikel_id?>
              &nav=<?php echo $artikel_id?>&left=j&det= "><?= $rubrik ?></a>
              <?php }
        if (
    $sub_rub == 'ja' and $nav == $artikel_id)
             { 
    ?>
             <a href="show_shop.php?rb=<?php echo $artikel_id?>
               &nav=<?php echo $artikel_id?>&left=j"><?= $rubrik ?></a>
              <?php
    $res1 
    mysql_db_query($dbase"select * from rubrik 
               where top_rub = 
    $nav order by rubrik");
    $num1 mysql_num_rows($res1);
    for (
    $i1=0$i1<$num1$i1++)
         {
              
    $rubrik mysql_result($res1$i1"rubrik");
              
    $top_rub mysql_result($res1$i1"top_rub");
              
    $sub_rub mysql_result($res1$i1"sub_rub");
              
    $artikel_id mysql_result($res1$i1"rubrik_id");
              
              echo 
    "<a href=\"show_shop.php?
    rb=
    $artikel_id&nav=$top_rub\">$rubrik</a>";

                  }

           }

    }
    Funktionieren tut es mit einer Hauptkategorie inkl einer Unterkategorie.
    Soll aber eine weitere Unterkategorie in die 1. Unterkategorie gesetzt werden, gehts noch nicht.
    Wer sieht ne Lösung in meinem Prob bzw. kann mich auf den Weg bringen ?

    CU

  • #2
    mit der erklärung komme ich nicht so weit. vermute aber, dass dein problem in der fehlenden rekursion liegt, oder du dir eine zweite tabelle anlegen musst.

    Kommentar


    • #3
      ich hab mal sowas ähnliches gebastelt, war ein dynamisch erzeugtes menü aus ner datenbank...

      hatte zwei tabellen eine mit den hauptkategorien
      id, name usw
      und eine mit den unterkategorien, dort hab es so gemacht, das jede unterkategorie ne eindeutige id gekriegt hat, nen namen, sowie zur zuordnung die id der hauptkategorie und die id, der darüberliegendenden unterkategorie (wenn es die erste ebene der unterkategorie war stand -1 in der spalte)

      konnte mit ner rekursieren funktion so das komplette menü auslesen...
      code hab ich leider nicht griffbereit, aber vielleicht hilft dir der lösungsansatz etwas

      Kommentar


      • #4
        Erstmal thx für die schnellen Antworten :-)

        Wenn ich das jetzt richtig rauslese,
        habe ich bei 2 Tabellen (Hauptkategorie u. Unterkategorie)
        dann ein Join zu basteln ?
        Machts dann noch Sinn das Per "FOR" zu durchlaufen
        oder eher mit "WHILE" ?

        Hat das dann folgende Auswirkungen auf meine Artikel-DB ?
        Denn dort ist ja die Rubrik_ID zugeordnet ?

        Und was hats mit dem "rekursiv" auf sich ?
        Ich habe hier ne Menge dazu gelesen, kann davon aber nichts
        für meine Lösung erkennen.
        Auch bzgl. menu_menu habe ich hier vieles Lesen können,
        gab mir aber ehrlich gesagt mehr Rätsel auf als ich eh schon habe :-(
        Zuletzt geändert von Dirk-Kiel; 22.11.2005, 08:57.

        Kommentar


        • #5
          rekursive funktionen sind funktionen die sich selbst aufrufen
          allerdings muss in den funktionen dann auch ne abbruch bedingung stehen, sonst gibts ne endlosschleife

          Nachtrag: und da du ja ein menü mit unbekannter tiefe hast musst du die funktion dann sooft aufrufen bis sie ne abbruch bedingung bekommt (in meinem obengeannten beispiel war es -1)

          Kommentar


          • #6
            @ st@tic :
            wenn ich das nun richtig verstehe :

            ich brauche 2 tabellen

            DB Haupt:
            id | name
            1 | Prozessoren
            DB Unter:
            id | name | unter | haupt
            1 | AMD | | 1
            2 | AthlonXP | 1 | 1
            3 | AthlonMobile | 1 | 1
            4 | Intel | | 1
            5 | IntelMobile | 4 | 1


            Das ist ein Besipiel das ich gefunden habe für diese Rekursive-Sache.
            Noch verstehe ich es aber nicht ganz.
            anstelle "(int n)" kann ich doch beliebiges setzen, z.B. (eine_ID) oder so ?

            Und anstelle von "System.out.print(....)" kann ich doch auch meine
            generierten links eintragen, oder ?


            Warum aber muß sowas 2mal durchlaufen werden ?

            PHP-Code:
            static void   runter1  int n )
            {
              if ( 
            == )   // Rekursionsende
                
            return;

              
            System.out.print( ", " );

                
            runter1  n – 1 );
            }

            static 
            void   runter2  int n )
            {
              if ( 
            == )   // Rekursionsende
                
            return;

                
            runter2  n – 1 );

              
            System.out.print( ", " );

            CU

            Kommentar


            • #7
              ne du brauchst nicht zwangsläufig zwei tabellen, das is halt nur mein konzept bei ner ähnlichen sache gewesen...

              ok ich mach ne kurze beispiel funktion in php und versuchs zu erklären

              PHP-Code:
              function rekursiv($Zahl)
              {
                  if(
              $Zahl 0)
                  {
                      
              $Zahl--;
                      
              rekursiv($Zahl);
                  }

              du rufst die funktion mit nem wert z.B. 3 auf dann wird überprüft ob der parameter $Zahl groeßer ist als 0 wenn ja wird er dekrementiert und dann wird die funktion wieder aufgerufen allerdings mit dem neuen Wert der Variable $Zahl (in dem fall 2)

              Kommentar


              • #8
                Für eine Navigation - solange es nicht über 1000 sind - würde ich die das Nested Set Modell empfehlen. Da die oben angegebenen lösungen zu einen overhead führen wird. Mal davon abgesehen solltest Du später die Navigation cachen.

                http://www.php-resource.de/forum/sho...threadid=56785
                http://ffm.junetz.de/members/reeg/DS...00000000000000
                Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
                PHP Sicherheit
                PHPUnit[1-2]
                Professionelle Softwareentwicklung mit PHP 5
                Professionelle PHP 5-Programmierung

                Kommentar

                Lädt...
                X