PHP - Galerien Listung - REKURSION

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

  • #16
    So eine Navigation ist aber auch ein Seitenelement, das man gut cachen kann.

    Kommentar


    • #17
      Original geschrieben von PHP-Desaster
      So eine Navigation ist aber auch ein Seitenelement, das man gut cachen kann.
      Eben.
      Nested Set ist auch sehr schnell beim Abruf.
      SHM.
      Oder halt eben plain simple old include(...html).

      Aber bei 3 Seitenaufrufen in der Stunde sollte man eher Arbeitszeit gering halten, als darauf zu achten, dass der Server 99% statt 98%idle-time hat

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #18
        Ok Jungenz! Und was heißt das jetzt für mich!? Ich mein mal ehrlich...
        Eure Ansätze haben beide eine Begründung, aber ich will mir den Kopf nicht drüber zerbrechen welcher Server jetzt was zu berechnen hat, sondern ich brauch irgendwie ne Lösung für mein Problem.
        Also allein hab ich es nach wie vor noch immer nicht geschafft; Trotzdem mir zwei, drei Posts schon echt ein schönes Stück weiter geholfen haben, darum bitte back to topic; ja!?
        WHILE (!$asleep) { $sheep++; }

        Kommentar


        • #19
          Du nimmst einfach die Lösung die du jetzt hast und korrigierst die.
          Dafür liest du die Tutorials zu Rekursion so oft, bis du es selbst hin kriegst.
          Thema beendet.

          In nem Jahr wenn deine Website größer ist sprechen wir uns wieder~

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #20
            Also ich lese das von get_categories() zurückgelieferte array jetzt rekursiv aus und lass mir das mal einfach per OL und LI formatieren...

            Trotz modifizierter Bedingungen bekomme ich nach wie vor zu viele array-levels zuück... *grummel*
            PHP-Code:
            function get_categories() {
              
            $return = array();
              
            $result mysql_query("SELECT id,name FROM site_galleries WHERE issub=0");
              while (
            $row mysql_fetch_assoc($result)) {
                IF (
            get_sub($row['id'])) {  
                  
            $return[] = array($row"SUB" => get_sub($row['id']));
                } else {
                  
            $return[] = array($row);
                }
              }
              return 
            $return;
            }

            function 
            get_sub($parent) {
              
            $return = array();
              
            $result mysql_query("SELECT id,name FROM site_galleries WHERE issub=1 AND subof='".$parent."'");
              while (
            $row mysql_fetch_assoc($result)){
                IF (
            get_sub($row['id'])) {
                  
            $return[] = array($row'SUB' => get_sub($row['id']));
                } else {
                  
            $return[] = array($row);
                }      
              }
              return 
            $return;

            Was raus kommt: click
            WHILE (!$asleep) { $sheep++; }

            Kommentar


            • #21
              WHERE issub=0 <<--- Was ist das denn?

              Du hast do wohl nicht in der DB jeden Menupunkt markiert, ob er ein SUB ist, oder?
              Wenn ja, dann ist das wohl unnötig komliziert.

              Wenn du rekursiv arbeiten willst, verwende das parent id Konzept. Dann ergibt sich das automatisch. Elemente mit parent=0 sind Wurzelelemente. Die andern haben die ID Parent in dieser Spalte.
              Wir werden alle sterben

              Kommentar


              • #22
                @combie: Da hast du recht! Also ich hab mal die DB-Spalte "issub" entfernt. Die veränderten Queries:
                PHP-Code:
                function get_categories() {
                  
                $return = array();
                  
                $result mysql_query("SELECT id,name FROM site_galleries WHERE subof=0");
                  while (
                $row mysql_fetch_assoc($result)) {
                    IF (
                get_sub($row['id'])) {  
                      
                $return[] = array($row"SUB" => get_sub($row['id']));
                    } else {
                      
                $return[] = array($row);
                    }
                  }
                  return 
                $return;
                }

                function 
                get_sub($parent) {
                  
                $return = array();
                  
                $result mysql_query("SELECT id,name FROM site_galleries WHERE subof='".$parent."'");
                  while (
                $row mysql_fetch_assoc($result)){
                    IF (
                get_sub($row['id'])) {
                      
                $return[] = array($row'SUB' => get_sub($row['id']));
                    } else {
                      
                $return[] = array($row);
                    }      
                  }
                  return 
                $return;

                WHILE (!$asleep) { $sheep++; }

                Kommentar


                • #23
                  Es ist ganz ungünstig get_sub mehrmals für die gleiche id aufzurufen! Speichere das Ergebnis in einer Variablen und benutze diese.

                  Funktioniert es jetzt?
                  Ansonsten poste einen DB-Dump und die Ausgabe von
                  <pre> print_r(get_categories, 1) . </pre>

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #24
                    Ok! Habe das jetzt mal abgeändert und die Variable "therow" gesetzt...
                    PHP-Code:
                      while ($row mysql_fetch_assoc($result)){
                        
                    $therow get_sub($row['id']);      
                        IF (
                    $therow) {
                          
                    $return[] = array($row'SUB' => $therow);
                        } else {
                          
                    $return[] = array($row);
                        }      
                      } 
                    Natürlich ändert sich dadurch nichts!
                    Hier mal der gewünschte DB-Dump:
                    PHP-Code:
                    CREATE TABLE `site_galleries` (
                      `
                    idint(11NOT NULL auto_increment,
                      `
                    namevarchar(100character set latin1 collate latin1_german1_ci NOT NULL default 'N/A',
                      `
                    infotext character set latin1 collate latin1_german1_ci NOT NULL,
                      `
                    issubint(11NOT NULL default '0',
                      `
                    subofint(11NOT NULL default '0',
                      `
                    ownerint(10NOT NULL,
                      `
                    linkedint(10) default NULL,
                      `
                    viewerlvlint(2) default NULL,
                      
                    PRIMARY KEY  (`id`)
                    ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;

                    INSERT INTO `site_galleries` (`id`, `name`, `info`, `issub`, `subof`, `owner`, `linked`, `viewerlvl`) VALUES
                    (1'Schuljahr 2005/2006''Das gesammelte Bildmaterial aus dem Schuljahr 2005/2006'003NULLNULL),
                    (
                    2'Schuljahr 2006/2007''Das gesammelte Bildmaterial aus dem Schuljahr 2006/2007'003NULLNULL),
                    (
                    3'Schuljahr 2007/2008''Das gesammelte Bildmaterial aus dem Schuljahr 2007/2008'003NULLNULL),
                    (
                    4'Schuljahr 2008/2009''Das gesammelte Bildmaterial aus dem Schuljahr 2008/2009'003NULLNULL),
                    (
                    5'TEST''sadsadasd'003NULLNULL),
                    (
                    6'sdsadas''dsadsadsadsad'003NULLNULL),
                    (
                    7'asdsad''asdasdasd'163NULLNULL),
                    (
                    8'Eröffnungsgottesdienst''Eröffnungsgottesdienst beim Bründl'1434NULL),
                    (
                    9'TEST SUBSUB'''173NULLNULL),
                    (
                    10'TEST SUBSUBSUB'''193NULLNULL),
                    (
                    11'TEST SUBSUBSUBSUB'''1103NULLNULL),
                    (
                    12'BOR 4a''Berufsinformation für die 4a im September 2008'143NULLNULL),
                    (
                    13'TEST SUBSUBSUB'''193NULLNULL),
                    (
                    14'mumu''haha'113NULLNULL),
                    (
                    15'SUBSUBSUB HAHA''I lold because it works fine!'003NULLNULL),
                    (
                    16'Next episode....''The loling was funny because i loled verry much!'1113NULLNULL),
                    (
                    17'Another Brick in the Wall''Hehe! I'm testin' this shit extensively...'1103NULLNULL); 
                    Außerdem noch das Ergebniss von <pre>print_r(get_categories())</pre>:

                    http://www.marianum-steinberg.at/2009/test/gall.php
                    WHILE (!$asleep) { $sheep++; }

                    Kommentar


                    • #25
                      Das Array entspricht deinem Dump.
                      Deine Ausgabe muss falsch sein, oder du hast nicht das in die DB eingespeist was du haben willst.

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #26
                        Die Ausgabe:
                        PHP-Code:
                        function echoarray($var) {
                          if(
                        is_array($var)) {
                            echo 
                        "<ul>\n";
                            foreach(
                        $var as $value) {
                              echo 
                        "<li>\n";
                              
                        echoarray($value);
                              echo 
                        "</li>\n";
                            }
                            echo 
                        "</ul>\n";
                          } else {
                            echo 
                        $var;
                          }

                        WHILE (!$asleep) { $sheep++; }

                        Kommentar


                        • #27
                          Das war idT etwas tricky, weil wir den Daten keinen Key zugewiesen haben.
                          PHP-Code:
                          // statt
                          $return[] = array($row, ...);
                          // besser
                          $return[] = array("daten" => $row, ...); 
                          Lösen lässt es sich allerdings dann doch, z.B. so

                          PHP-Code:
                          function echoarray($var) {
                              echo 
                          "<ul>\n";
                              foreach (
                          $var as $val) {
                                  echo 
                          "<li>" $val[0]["name"];
                                  if (isset(
                          $val["SUB"])) {
                                      echo 
                          "<br />\n";
                                      
                          echoarray($val["SUB"]);
                                  }
                                  echo 
                          "</li>";
                              }
                              echo 
                          "</ul>\n";


                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #28
                            Das ist also des Rätsel's Lösung!

                            Vielen, vielen Dank für deine Geduld ghost!

                            Jetzt muss ich das nur noch ein wenig überarbeiten, dass der ausgegebene HTML-Source auch passt und dann...

                            Juhu!
                            WHILE (!$asleep) { $sheep++; }

                            Kommentar


                            • #29
                              [COLOR=red]Noch ein Problem:[/COLOR]

                              Irgendwie schaffe ich es nicht die Rekursionstiefe mit zu geben! Irgend ne Idee wie ich die mitzählen kann!?
                              WHILE (!$asleep) { $sheep++; }

                              Kommentar


                              • #30
                                PHP-Code:
                                function echoarray($var$depth=1) {
                                  
                                // ...
                                  
                                echoarray($value$depth+1);
                                  
                                // ...

                                Kommentar

                                Lädt...
                                X