Endlose (Sub/)Kategorien

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

  • Endlose (Sub/)Kategorien

    Hi,

    ich habe folgendes Problem:

    Ich will unendlich viele und tiefe Kategorien anlegen und unterordnen.

    Meine Tabelle in MySQL siehst so aus:

    id bigint(14) NOT NULL auto_increment,
    titel varchar(50),
    pid int(14),

    pid ist immer die ID der Kategorie die ich als Elternkategorie hab und somit über der Subkategorie liegt.

    Jetzt will ich also folgendes machen:
    1.Kategorie
    1.1 Kategorie
    1.1.1.Kategorie
    1.1.2 Kategorie
    1.1.2.1.Kategorie
    1.1.2.2 Kategorie
    usw.

    Ich lese also die Mainkategorie (1) aus, per klick darauf, öffnet sich die 1.1. Kategorie.
    So weit so gut.
    Wenn ich dann auf die 1.1. klicke hab ich ein Problem.
    Mein Fenster sieht dann so aus:
    1.1 Kategorie
    1.1.1.Kategorie
    1.1.2 Kategorie

    Sprich die 1. Kategorie verschwindet.
    Vom Code her weiß ich natürlich warum das so ist nur lautet meine Frage, ob ihr vielleicht wisst, wie man sowas regeln kann.

    Meine Ansätze, die mir bereits gegeben wurden:
    -Alle Kategorien zuvor in ein mehrdimmensionales Array einlesen
    -Root und ParentIDs zu benutzen

    Nur mit den Arrays kann ich mir das noch nicht so ganz vorstellen.

    Ich grübel schon länger darüber nur komme nicht auf den entscheidenen Weg.

    Danke für jede Antwort

  • #2
    Naja wenn du mit sowas mit unendlich vielen Unterkategorien machen willst, dann musste dich erst mal mit Rekursiven Funktionen befassen (falls du das nicht schon hast).

    Jo das mit den Arrays löse ich so:
    DB Struktur:

    categories
    ->ID
    ->Title
    ->parent
    ...

    Das Ganze wird abgefragt und in folgender Schleife in ein Array gespeichert:
    PHP-Code:
    while( $r mysql_fetch_assoc() )
    {
        if( 
    $r['parent'] == -)
        {
            
    $r['parent'] = 'root'// muss nicht unbedingt sein aber ich finds praktischer
        
    }

        
    $array$r['parent'] ][ $r['ID'] ] = $r

    Und schon hat man sein Array mit dem man arbeiten kann. Probier das mit der Rekursiven Funktion erst nochmal selber falls dus nicht hinbekommen solltest meld dich halt nochmal, dann geben wir dir ncohmal einen Denkanstoß.
    daniel-portal.com/games Free Games and more

    Kommentar


    • #3
      Danke,
      ich werd mich morgen mit rekursiven Funktionen beschäftigen.

      Kommentar


      • #4
        suche nach "nested sets" oder hier im Forum nach "menu_menu"
        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
          Also ich werde es wohl mit einer rekursive Funktion machen.
          Zuletzt geändert von JfK; 18.03.2005, 16:56.

          Kommentar


          • #6
            Das ist vernünftig ... !
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #7
              Also klappt wunderbar.

              Nur jetzt hab ich durch die rekursive Funktion einen Wert X ausgelesen, der von selbst ermittelt wird.

              Bis an diese Auslese wurde die Funktion ja mehrmals aufgerufen und ne Schleife durchlaufen.
              Wie wäre jetzt wohl der beste Weg diesen Weg gewollt zu gehen. Sprich wir kennen Wert X

              Bsp.:

              Kategorien

              Nach dem Motto: index.php?a=showcat&id=5

              Die Kategorie anzeigen, ist kein Ding. Nur dann die Überkategorien auslesen. Damit tu ich mich im Gedankengang schwer.
              Hab noch nichts ausprobiert, deswegen ist nicht schlimm, wenn hier keiner ne Antwort gibt. Ich knoble gerne über solchen Sachen.

              Kommentar


              • #8
                wenn du es mit deinen geliebten rekursionen machen willst, brauchst du doch nur die id der parent_id auslesen. von dieser id via parent_id wieder ne ebene höher usw.

                aber wie gesagt ... rekursiv.
                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


                • #9
                  wenn du es mit deinen geliebten rekursionen machen willst, brauchst du doch nur die id der parent_id auslesen. von dieser id via parent_id wieder ne ebene höher usw.

                  aber wie gesagt ... rekursiv.
                  OffTopic:
                  Nimm ihm doch nicht die ganze Freude am selber rausfinden. Ich hab auch extra noch meinen Mund gehalten.
                  daniel-portal.com/games Free Games and more

                  Kommentar


                  • #10
                    naja. mit ein wenig denken findet man sowas eigentlich schnell raus.

                    aber ich wollte ja, dass er die nacht noch etwas mit tippen beschäftigt ist und nicht allzusehr grübeln muss .....
                    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


                    • #11
                      Also mein Posting vor n paar Stunden war ganz kurz und übereilt.

                      Bei meinem freitagabendlichen trinken, ist mir das natürlich in den Kopf gekommen.


                      Man übergibt der rekursiven Funktion ja ne id eines Datensatzes (Parent).
                      Wenn man jetzt aber von einer Unterkategorie aus die Parentkategories angezeiogt bekommen will, muss man das ganze umgekehrt machen sprich ne zweite rekursive Funktion schreiben.

                      Alles kein Ding,

                      Danke an euch.

                      Jetzt hab ich aber noch eine Fragen:
                      Es geht um Kategorien, wie ihr vielleicht gemerkt habt.

                      Parentkategorie
                      -Subkategorie
                      -Subkategorie
                      -Subkategorie

                      Ich will die Subkategorie immer mit nem & n b s p ; hervor heben. Damit man sieht, dass es ne Subkategorie ist.
                      Dazu muss ich aber die Schleifen/Funktion-Durchläufe zählen.
                      Da hatte ich noch so meine Probleme.
                      Wäre nett, wenn mir einer sagen kann, wie ich das lösen kann.

                      Eine rekursive Funktion mit einer internen Schleife.
                      Wie kann ich die Leerzeichen erechnen, die ich immer vor die Subkategorien setzen k ann?

                      Kommentar


                      • #12
                        einen weiteren parameter mitgeben .... aktuell+1
                        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

                        Lädt...
                        X