Unbegrenzte Unterkategorien

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

  • Unbegrenzte Unterkategorien

    salut,

    also bis jetzt haben ich nur was zu themen gefunden "eine unterkategorie" - würd aber einen denkanstoss zu einem system mit unbegrenzten unterkategorien brauchen.

    das script soll ein artikelscript mit htmlarea werden. und so ca wie das hier werden - mit kleinen änderungen....

    also was ich mir bis jetzt überlegt hab reichen für das script 2 tabellen - eine für die artikel und eine für die kategorien.

    Code:
    Tabellenstruktur Kategorien:
    
    id|name|parent
    --------------
      |    |
    die id is auto increment.
    als name der name der kategorie hald und bei parent kommt die id der übergeordneten kategorie rein. somit kann ich alle kategorien dort eintragen.

    so mein problem wär jetzt das auslesen der kategorien mit den unterkategorien.

    es is schwer zu erklären: die übersicht der kategorien soll so dargestellt werden:

    Code:
    Kategorie1
         Unterkategorie1
              Unterunterkategorie1
              Unterunterkategorie2
         Unterkategorie2
    .
    .
    .
    also wie dargestellt soll jede kategorie ein stück eingerückt werden.
    ich hab mir gedacht dass mach ich einfach mit einem spacer.gif der bei unterkategorie1 eine width=25 hat und bei der Unter-unterkategorie eine width=50 in der nächsten unterkategorie dann 75 usw...

    ok jetzt mal zu meinen scriptüberlegungen.
    am gscheitesten wärs, eine funktion zu schreiben die die kategorien ausliest und überprüft ob unterkategorien vorhanden sind. falls es unterkategorien gibt soll sich die funktion selbst nochmal aufrufen.

    ich hab mir das so überlegt, dass ich der funktion 2 parameter übergeb.
    der erste parameter gibt mir die id der kategorie die auf unterkategorien überprüft werden soll. der zweite parameter soll sowas wie die "tiefe" der kategorien festhalten, den ich dann als multiplikator für die width des spacers einsetze.

    ich hoff das is so weit irgendwie verständlich was ich mein...

    meine frage ist jetzt folgende wenn das scirpt so abläuft:

    Code:
    function_cat($var_cat_id,$i)
    der zähler für die width ($i) ist 0
    alle kategorien werden ausgelesen die bei parent 0 stehen haben
    für jede kategorie id, die parent 0 hat wird 
    gecheckt ob die kategorie id irgendwo als parent vorhanden ist
    falls ja : funktionsaufruf
         function_cat($var_cat_id,$i++)
         selbes spiel
              function_cat($var_cat_id,$i++)
    jetzt meine fragen
    kann ich beim funktionsaufruf $i++ verwenden?
    und passiert da nicht das:
    bei der ersten kategorie steht i=0 (parent=0)
    bei der ersten unterkategorie wird es dann auf 1 erhöht. falls dann aber keine weitere unterkategorie vorhanden ist, ist die funktion quasi beendet und die funktion bei parent=0 läuft ja noch weiter und sucht nach weitern hauptkategorien und überprüft dann die wieder ob unterkategorien vorhanden sind. und wenn diese funktion in der funktion beendet ist steht ja i auf 1 und wenn dan die erste funktion weiterläuft steht dann ja i auch noch auf 1 und nicht auf 0 wie es sein sollte.

    wenns verwirrend is bitte sagts es mir dann versuch ichs anders zu erklären.
    wär leiwand ob mir wer helfen könnte.

    das scirpt selber mit auslesen und dem ganzen zeug kann ich eh. es is nur dieses problem mit dem aufbau der funktion in der funktion und der variable die die tiefe mitzählt.
    EDIT:
    linebreak sponsored by asp2php. Bitte demnächst selbst dafür sorgen.
    Zuletzt geändert von asp2php; 10.09.2004, 22:35.

  • #2
    hab nicht alles gelesen, aber guck dir mal nestedsets an, bzw. menumenu

    Kommentar


    • #3
      jo, z.b. : http://www.php-resource.de/tutorials/read/21/1/

      php-Entwicklung | ebiz-consult.de
      PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
      die PHP Marktplatz-Software | ebiz-trader.de

      Kommentar


      • #4
        Original geschrieben von TobiaZ
        menumenu
        was das denn?
        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
          denk dir einen unterstrich dazwischen

          http://www.php-resource.de/forum/sho...ight=menu_menu

          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            schau dir mal meine Klasse an, ist genau dafür gebaut. Auf MySQL anpassen musst du nur noch http://www.php-resource.de/forum/sho...threadid=44274

            Kommentar


            • #7
              ok danke mal für die antworten - ich werd mich morgen durchwühlen - falls noch fragen offen bleiben wend ich mich wieder an euch.

              Kommentar


              • #8
                OffTopic:
                ups, _ vergessen...

                Kommentar


                • #9
                  asp2php

                  hab absolut keinen blassen schimmer wie das mit deiner klasse funktionieren soll.

                  Kommentar


                  • #10
                    asp2php ich hoff dich störts nicht dass ich deine klasse als denkanstoß verwendet hab...

                    ich hab schon eine genauere vorstellung wie ich das mach

                    Code:
                    - stage als static =0
                    - mit sql werden alle einträge ausgelesen wo parent = 0 ist
                    - in einer for schleife lass ich jeden eintrag gleich mal ausgeben 
                      es wird überprüft ob ein eintrag vorhanden ist der die id des jetzigen
                      menüpunktes als parent hat wenn ja:
                      - stage ++
                      - funktion ruft sich selbst nochmal auf mit anderen parametern
                      - stage --
                    mit dem stage muss ich irgendwo einfach die breite des spacers berechnen
                    Code:
                    $width = $width * $stage
                    oder so.

                    würd das so rein theoretisch funktionieren?

                    Kommentar


                    • #11
                      nimmt einfach die Klasse, ersetze die mssql Fkt. durch mysql Fkt dann wirst du schon sehen, dass die Klasse genau auf deine Tabellen-Struktur passt. . Warum willst du neu schreiben, versuche einfach zu verstehen, was die Methode Get_Tree macht. Einfach Zeile für Zeile durchgehen und entsprechende Kommentare dazu verfassen, dann steigst du dahinter, wie das Ganze funz.

                      Kommentar


                      • #12
                        hab ich doch schon probiert...

                        aber welche mysql funktion passt zu mssql_get_last_message()

                        Kommentar


                        • #13
                          Original geschrieben von yoz
                          aber welche mysql funktion passt zu mssql_get_last_message()
                          mysql_error()

                          Kommentar


                          • #14
                            funktioniert trozdem nicht....

                            bevor ich da herumprobier, es letztendlich zum funktionieren bekomm, und dann nicht mal genau weiß wie es eigntlich funktioniert,
                            schreib ichs lieber selber.

                            wenn ich mit
                            $Navi->Create_Menu_Table();
                            eine tabelle erzeugen will kommt das hier.
                            Code:
                            rausgnommen wegen horizontal dings
                            ps hab auch nicht wirklich ahnung wie und wo man genau diese funktion verwendet weil mit klassen hab ich bisher nix am hut gehabt.
                            habs an jeder stelle von dem script hier versucht und nie hats geklappt.

                            PHP-Code:
                            <?php
                            include_once('./class/tree_navi.php');
                            // Einrückungstrenner, kann auch &nbsp; sein
                            $ImgDelimiter "<img src=\"./images/blank.gif\" width=\"10\" height=\"1\" />\n";
                            //Datei im Link
                            $NaviFile './index.php';
                            $Navi = new TreeNavi($ImgDelimiter,$NaviFile);
                            if (!isset(
                            $_GET['menu']))  // 1. Aufruf
                                
                            $Navi->selected[0] = 0;
                            else  
                            // sonst
                                
                            $Navi->selected explode('|'$_GET['menu']);
                            // Navi ausgeben
                            echo $Navi->Get_Tree(0,'');
                            ?>
                            ps sry wegen dem horizontal scrolling aber es geht ned anders weil ich möcht die fehlermeldung ned irgenwie verpfuschen
                            Zuletzt geändert von yoz; 13.09.2004, 11:32.

                            Kommentar


                            • #15
                              if not exists (select * from dbo.sysobjects
                              where id = object_id(N'[dbo].[tbl_menu]')
                              and OBJECTPROPERTY(id, N'IsUserTable') = 1) CREATE TABLE ...

                              ist MS-SQL (T-SQL). In MySQL musst du mal hier: http://dev.mysql.com/doc/mysql/en/ nachlesen. Irgendwann ist es das erste Mal, per SQL-Command Tabelle zu erstellen. Jetzt ist die Gelegenheit da . Versuch mal, wir werden dir beistehen

                              Kommentar

                              Lädt...
                              X