DYNAMISCHES MENUE MIT PHP und MySQL PROFIS GEFRAGT

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

  • DYNAMISCHES MENUE MIT PHP und MySQL PROFIS GEFRAGT

    Mein anliegen ist das ich ein Menü Programmieren will das soviele Untermenüs wie möglich in eine Datenbank speichern kann und diese wieder in einer art baumstrucktur ausgibt. das Speichern ist kein problem da habe ich folgende MYSQL Strucktur benutzt.
    _______________________________
    CREATE TABLE `kategorie` (
    `ID_KATEGORIE` int(11) NOT NULL auto_increment,
    `NAME_KATEGORIE` varchar(60) NOT NULL default '',
    `PARENT_ID` int(11) NOT NULL default '0',
    `SORT_ORDER` int(3) NOT NULL default '0',
    `DATE_ADDED` datetime NOT NULL default '0000-00-00 00:00:00',
    `DATEMODIFIED` datetime NOT NULL default '0000-00-00 00:00:00',
    PRIMARY KEY (`ID_KATEGORIE`),
    KEY `PARENT_ID` (`PARENT_ID`)
    ) TYPE=MyISAM AUTO_INCREMENT=9 ;
    ___________________________________________________

    Ich habe jetzt bloß Probleme bei der Ausgabe ich dachte eine rekursion wird da weiterhelfen. Also habe ich mit arrays und funktionen um mich geschmissen und diese mal ausprobiert.

    Problem ist jetzt das ich die erste und die zweite ebene erhalte. Bloß geht es nicht weiter.

    Ich muss eine Funktion schreiben der alle menues zurückverfolgend aus gibt wie folgt:

    Menue1
    Untermenue1
    SubUntermenue1
    Subuntermenue2
    Untermenue2
    Menue2

    und so weiter.

    dazu habe ich dieses Script geschrieben das leider nicht funktioniert würde mich unheimlich freuen wenn Ihr mir helfen könntet:
    _________________________________________________
    function sub_categories ($Kategorie, $account)
    {
    $query_sub_menu = "SELECT * FROM `kategorie` WHERE `PARENT_ID` = '".$Kategorie."'";
    $result_sub_menu = @mysql_query($query_sub_menu);
    $num_sub_menu = @mysql_num_rows($result_sub_menu);
    if ($num_sub_menu >= 1)
    {
    for ($j=0; $j < $num_sub_menu; $j++)
    {
    $row_sub_menu = @mysql_fetch_object($result_sub_menu);
    $id_name = array();
    $account = array_merge($account, array($row_sub_menu->NAME_KATEGORIE => $row_sub_menu->ID_KATEGORIE ));
    }
    return $account;
    }
    }

    function sub_categories_link($ID, $PARENT_ID)
    {
    if (($_REQUEST['untermenue'] == "true") && ($_REQUEST['ID_KATEGORIE'] == $ID))
    {
    $z = sub_categories($_REQUEST['ID_KATEGORIE'],array());
    while(!empty($z))
    {
    $menu_name = array_keys ($z);
    while(!empty($menu_name))
    {
    echo "&nbsp;&nbsp;&nbsp;<a href=menue.php?untermenue=true&liste=true&ID_KATEGORIE=".array_shift($z).">".array_shift($menu_name) ."</a><br> ";
    }
    }
    }
    if (($_REQUEST['untermenue'] == "true") && ($_REQUEST['ID_KATEGORIE'] == $PARENT_ID))
    {
    $z = sub_categories($_REQUEST['$PARENT_ID'],array());
    while(!empty($z))
    {
    $menu_name = array_keys ($z);
    while(!empty($menu_name))
    {
    echo "&nbsp;&nbsp;&nbsp;<a href=menue.php?untermenue=true&liste=true&ID_KATEGORIE=".array_shift($z).">".array_shift($menu_name) ."</a><br> ";
    }
    }
    }
    }


    //Die verbindungsdatei
    include("connection.tmp");

    $query = "SELECT * FROM `kategorie` WHERE `PARENT_ID` = '0'";
    $result = @mysql_query($query);
    $num = @mysql_num_rows($result);
    if ($num < 1) { echo ("Kein Menü");} else
    {
    for($i = 0; $i < $num; $i++)
    {
    $row = @mysql_fetch_object($result);
    //ausgabe Hauptkatagorie
    echo "<a href=menue.php?untermenue=true&ID_KATEGORIE=".$row->ID_KATEGORIE.">".$row->NAME_KATEGORIE."</a>";
    echo "<br>";
    sub_categories_link($row->ID_KATEGORIE, $row->PARENT_ID);
    //echo "<br>";
    }
    }

  • #2
    suche mal nach "rekursiv" hier im Forum. Außerdem habe ich sogar eine Klasse dafür geschrieben, ist aber für MS-SQL , man kann aber schnell umschreiben. Bei Interesse kannst du mal im Codeschnipsel vorbei schauen. Rekursion ist immer mit Vorsicht zu genießen, d.h. übertreibe nicht mit der Tiefe, denn du läufst dabei Gefahr, einen stack overflow trotz korrekte Programmierung herbeizurufen.

    Kommentar


    • #3
      nested sets seien hierbei auch kurz genannt. ;-)
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        such mal nach "menu_menu" hier im Forum, da ist sowas aufgebaut incl. der SQL Anweisungen dafür
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          Original geschrieben von Abraxax
          nested sets seien hierbei auch kurz genannt. ;-)
          aber Haxe, er hat die Tabellenstruktur schon auf id,parentid festgenagelt

          Kommentar


          • #6
            Original geschrieben von asp2php
            aber Haxe, er hat die Tabellenstruktur schon auf id,parentid festgenagelt
            dann muss er halt neue nägel schlagen ...
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              Das nested sets modell ist hierfür herforrangend geiegnet. ausserdem gibt bei pear dafür ein package NestedSet . ist zwar noch im beta statium, aber es funktioniert eingeltich ganz gut. Beispiel

              cheers
              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