Ankündigung

Einklappen
Keine Ankündigung bisher.

Navigation

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

  • Navigation

    Hallo zusammen,

    Ich hab gerade ein kleines Blackout. Irgendwie fällt mir einfach keine Lösung ein...
    Es geht um folgendes:
    Ich habe eine MySQL-Datenbank in der alle Seiten gespeichert sind. Diese sieht von der Struktur her ungefär so aus(beispiel):
    ==============================
    ID | History(Ebene) | Name |
    0 | 0 | Startseite |
    1 | 0 | Beispiel |
    2 | 0.1 | Unterseite1 |
    3 | 0.1.2 | Unterseite2 |
    ==============================

    Das ganze sollte als Navigation dann so ausgegeben werden:
    HTML-Code:
    <div class="navigation">
    <ul class="navigationitems">
    <li>Startseite</li>
    <li>Beispiel
    <ul><li>Unterseite1
    <ul><li>Unterseite 2</li></ul>
    </li>
    </ul>
    </li>
    </ul>
    </div>
    Im Beispielfall wäre Unterseite 1 die Unterseite von Beispiel und Unterseite 2 die Unterseite von Unterseite 1...

    Wie kann ich diese Datenbankstruktur in eine vernünftige Navigation umwandeln? Ich bedanke mich schon zum voraus ab Antworten.

    MFG
    [ASTERIX]

  • #2
    AW: Navigation

    mit einem simplen typ>

    ID | sub | Name |
    0 | -1 | Startseite |
    1 | -1 | Beispiel |
    2 | 1 | Unterseite1 |
    3 | 2 | Unterseitea |
    4 | 1 | Unterseite2 |
    5 | 4 | Unterseite2 |
    gibt aus:

    Startseite
    Beispiel
    ---Unterseite1
    ------Unterseitea
    ---Unterseite2
    ------Unterseiteb
    erklärung: ist sub -1 ist es ein direkter menüpunkt.
    ist sub>-1 gehört der menü punkt der ID die in sub angegben ist. in diesem beispiel ist sub von Unterseite1 = 1 deswegen wird Unterseite1 unter Beispiel angezeigt.....usw.
    AC/DC Fanpage www.ifyouwantblood.de
    Nein zur Zensur im Internet und anderswo - Anonymous

    Kommentar


    • #3
      AW: Navigation

      Hallo,

      Danke für die Antwort! Hab echt den Kopf nicht ganz bei der sache gehabt... So sollte es ja gehen. Werd's ausprobieren.

      MFG
      [ASTERIX]

      Kommentar


      • #4
        AW: Navigation

        Hallo,

        Danke nochmals für die Antwort! Aber irgendwie klappts einfach bei der umsetzung in PHP nicht. Ich bin wirklich echter Newbie. Ich schaff' das einfach nicht... Ausserdem gibt's jetzt noch ein zusatzt der erfüllt werden muss: Die unterseiten müssten zusätzlich der aktuellen Seite entsprechen. Also nicht eine auflistung aller Items sondern nur deren die zur Seite gehören.
        Bsp:
        DB-Struktur:
        ==================
        ID | History | Name |
        1 | -1 | Start |
        2 | 1 | Sub1 von "start" |
        3 | 1 | Sub2 von "start" |
        4 | 2 | Sub von "Sub1 von Start" |
        5 | 3 | Sub von "Sub2 von Start" |
        ==================

        Ausgabe wenn aktive Seite "Sub1 von start" ist:
        HTML-Code:
        <ul>
        <li>
        Start
        <ul>
        <li>
        Sub1 von "start"
        <ul>
        <li>Sub von "Sub 1 von Start"</li>
        </ul>
        </li>
        <li>Sub2 von "Start"</li>
        </ul>
        <li>
        </ul>
        Sub von "Sub 2 von Start" sollte also nicht angezeigt werden, da dies ja keine Unterseite von "Sub 1 von Start" ist.

        Tut mir leid wenn ich noch so blöd frage... Aber ich weis wirklich nicht weiter.

        MFG
        [ASTERIX]

        Kommentar


        • #5
          AW: Navigation

          ich muss die bennenung logischer machen.....db struktur:

          Code:
          ==================
          ID | History | Name |
          1 | -1 | Start |
          2 | 1 | Sub1|
          3 | 1 | Sub2 |
          4 | 2 | SubA| 
          5 | 3 | SubB| 
          ==================
          die aktuelle ebene ist History von Sub1. du musst nur überprüfen ob die History von SubA größer ist als die aktuelle ebene, wenn ja, dann gibst dus nicht aus. das ganze könntest du auch als db ausdruck machen:

          Code:
          SELECT 'History','Name' FROM table WHERE 'History' <= %aktuelle ebene#
          AC/DC Fanpage www.ifyouwantblood.de
          Nein zur Zensur im Internet und anderswo - Anonymous

          Kommentar


          • #6
            AW: Navigation

            Ja, die benennung war wirklich nicht so gelungen, kam mir halt nichts besseres in den sinn. Danke für die Antwort. Aber irgendwie muss ich das ganze ja dann auch noch in der richtigen Ebene ausgeben. Das mann das so lösen kann war mir schon klar... Aber das es eben dann auch am richtigen Ort ausgegeben wird... Verstehst du wie ich das meine?
            Sorry, wegen der vielen Fragerei.+phpbb_smi

            MFG
            [ASTERIX]

            Kommentar


            • #7
              AW: Navigation

              Zitat von [ASTERIX] Beitrag anzeigen
              Sorry, wegen der vielen Fragerei.+phpbb_smi
              kein thema, dafür bin ich doch da

              Zitat von [ASTERIX] Beitrag anzeigen
              Aber irgendwie muss ich das ganze ja dann auch noch in der richtigen Ebene ausgeben. Das mann das so lösen kann war mir schon klar... Aber das es eben dann auch am richtigen Ort ausgegeben wird... Verstehst du wie ich das meine?
              MFG
              [ASTERIX]
              achso, jetzt versteh ich was du meinst. entweder musst du in php dann ein array anlegen (nehmen wir an du bist auf sub1):

              PHP-Code:
              $menu=Array(
                      Array(
              'Start',Array('Sub1','SubA'), 'Sub2',),
                                       
              'weiterer menüpunkt'
                     
              ); 
              beim auslesen musst du nur prüfen, ob der jetzige key ein array ist. wenn ja, ist der erste key dieses arrays der hauptmenüpunkt (dieses untermenüs) alles was folgt ein menüpunkt........
              AC/DC Fanpage www.ifyouwantblood.de
              Nein zur Zensur im Internet und anderswo - Anonymous

              Kommentar


              • #8
                AW: Navigation

                Hallo,

                Erstmals danke für die Antwort.
                So wie schon so oft happerts jetzt aber wieder ein bischen bei der umsetzung.
                Auf folgenden Code bin ich gekommen:
                PHP-Code:
                <?php
                $navigation 
                = Array();
                $naviquery mysql_query($standartquery);
                while(
                $navi mysql_fetch_object($naviquery)) {
                if(
                $navi->history == -1) {
                $navigation[] = $navi->id;
                } else {
                $navigation[$navi->history] = Array($navi->id);
                }
                }

                foreach(
                $navigation AS $naviitem) {

                }
                ?>
                Beim Foreach müsste jetzt natürlich noch so zeugs hinkommen. Aber da blick ich jetzt überhaupt nicht mehr durch.
                Für die fertige Version würde ich dann Mehrdimensionale Arrays verwenden.

                Wie müsste ich das jetzt noch lösen?
                Danke schon für die Antworten.

                Oder hab' ich da was falsch verstanden?

                MFG
                [ASTERIX]

                Kommentar


                • #9
                  AW: Navigation

                  zum einen musst du dein array nach den ids aufbauen.

                  dann musst du überprüfen ob der key des arrays in das du history einfügen willst, ein array ist. wenn nicht, musst du diesen wert in ein array umwandeln.

                  falls der wert nicht existiert (was bei einem 3. untermenü punkt der fall sein wird) musst du den eigentlichen unterpunkt finden. am besten speicherst du das gleich mit, wiederrum in einem array, dieses nach history => id.

                  so in etwa müsste das aussehen: (nicht getestet)

                  PHP-Code:
                  if($navi->history === -1$navigation[] = $navi->id;
                      else
                      {
                              if(isset(
                  $navigation[$navi->history]))
                              {
                                   if(
                  is_array($navigation[$navi->history])) $navigation[$navi->history][] = $navi->id;
                                         else
                                         {
                                                 
                  $navigation[$navi->history]=Array($navigation[$navi->history],$navi->id);
                                                 
                  /* Speichern welches sub menü zu welchem top menü gehört */
                                                 
                  $second_level[$navi->id]=$navi->history;
                                         }


                               }
                               elseif(isset(
                  $second_level[$navi->history]))
                               {
                                       if(
                  is_array($navigation[$navi->history][$second_level[$navi->history]])) $$navigation[$navi->history][$second_level[$navi->history]][] = $navi->id;
                                       else
                                       {
                                                 
                  $navigation[$navi->history][$second_level[$navi->history]]=Array($navigation[$navi->history][$second_level[$navi->history]],$navi->id);
                                        }
                               }
                               else echo 
                  'FEHLER bei id '.$navi->id;
                      }

                  Zuletzt geändert von Brian; 29.10.2007, 01:10.
                  AC/DC Fanpage www.ifyouwantblood.de
                  Nein zur Zensur im Internet und anderswo - Anonymous

                  Kommentar


                  • #10
                    AW: Navigation

                    Hallo,

                    Danke wieder für die gute "fertiglösung". Eigentlich sollte sie ja so funktionieren(eine { zuviel und ein $ zuviel hab ich entfernt), und ich habs auch kapiert, nur PHP wohl nicht. LEider funktioniert es so immer noch nicht. Ausserdem hab' ich noch nicht ganz begriffen für was $second_level da ist. Tut mir leid, hab halt noch nicht so die grösste erfahrung.
                    Würde mich ab einer Antwort freuen.


                    MFG
                    [ASTERIX]

                    Kommentar


                    • #11
                      AW: Navigation

                      so habs mal getestet, musst du noch für dich leicht umbauen (von $history auf $navi->history, von $id auf $navi->id und $v[1] auf $navi->name), dürfte aber nicht schwer sein:

                      PHP-Code:
                      <?php

                      $n
                      =Array(1=>Array(-1,'start'),2=>Array(1,'Sub1'),Array(2,'Suba'),Array(2,'Subb'),2=>Array(1,'Sub2'));

                      foreach(
                      $n as $id=>$v)
                      {
                          
                      $history=$v[0];

                          if(
                      $history === -1$navigation[$id] = $v[1]; 
                          else 
                          { 
                              if(isset(
                      $navigation[$history])) 
                              { 
                                  if(
                      is_array($navigation[$history])) $navigation[$history][] = $id
                                  else 
                                  { 
                                        
                      $navigation[$history]=Array($navigation[$history],$v[1]); 
                                      
                      /* Speichern welches sub menü zu welchem top menü gehört */ 
                                      
                      $second_level[$id]=Array($history,count($navigation[$history])-1); 
                                  } 


                                       } 
                              elseif(isset(
                      $second_level[$history])) 
                              { 
                                  if(
                      is_array($navigation[$second_level[$history][0]][$second_level[$history][1]])) $navigation[$second_level[$history][0]][$second_level[$history][1]][] = $v[1]; 
                                  else 
                                  { 
                                      
                      $navigation[$second_level[$history][0]][$second_level[$history][1]]=Array($navigation[$second_level[$history][0]][$second_level[$history][1]],$v[1]); 
                                  } 
                              } 
                              else echo 
                      'FEHLER bei id '.$id
                          }  
                      }

                      print_r($navigation);

                      ?>
                      gibt aus:

                      Code:
                      Array
                      (
                          [1] => Array
                              (
                                  [0] => start
                                  [1] => Array
                                      (
                                          [0] => Sub2
                                          [1] => Suba
                                          [2] => Subb
                                      )
                      
                              )
                      
                      )
                      so also zu second level: das ist dazu da, um folgendes problem zu lösen:

                      Code:
                      2 | 1 | Sub1|
                      4 | 2 | SubA|
                      hier weißt du, dass SubA zu Sub1 gehört, kennst aber den "vater" von Sub1 nicht. deswegen musst du dir das in einem weiteren Array() temporär zwischenspeichern.
                      oben gezeigter code geht im übrigen auch nach "kindlich folgender ordnung" aus, also in SQL folgendes anhängen (history muss der erstre "ordner" sein):

                      Code:
                      ORDER BY history
                      Zuletzt geändert von Brian; 31.10.2007, 02:17.
                      AC/DC Fanpage www.ifyouwantblood.de
                      Nein zur Zensur im Internet und anderswo - Anonymous

                      Kommentar


                      • #12
                        AW: Navigation

                        Hallo,

                        Danke wieder für die Antwort und dass du dir so mühe machst meine Fragen zu beantworten. Ist wirklich sehr nett. Ich erkannte nun aber das es so eindeutig ein zu komplexes Script gibt, das die Ladezeit unnötig verlängert. So habe ich mich dazu entschieden auch anzugeben auf welcher Ebene das ausgegeben werden muss. Das vereinfacht das ganze natürlich sehr stark und verursacht weniger ladezeiten. Ausserdem kann ich damit leben halt eine Angabe mehr zu machen.

                        Nun bin ich auf folgendes Script gekommen, was das ganze mit Listen ausgeben sollte. Leider funktioniert das nicht so ganz... Es sollte so doch funktionieren?
                        PHP-Code:
                        <?php
                        $naviqd 
                        "SELECT * FROM navi ORDER BY history";
                        $naviquery mysql_query($naviqd);

                        $tago FALSE;
                        while(
                        $navi mysql_fetch_object($naviquery)) {
                            if(
                        $navi->history == 1) {            /* Erste Ebene ausgeben. */
                            
                        ?>
                                <li><a href="<?php echo $navi->path?>" title="<?php echo $navi->title_alternative?>"><?php echo $navi->title?></a></li>
                            <?php
                            
                        } else {                        /* Alle anderen Ebenen... */
                                
                        if($navi->top_id == $api) {        /* ...die unterseiten sind($api steht für die ID der aktuellen Seite). */
                                    
                        if($tago == FALSE) {        /* Tag <ul> schon geöffnet? */
                                        
                        $i 1;
                                        while(
                        $i == $navi->history) {    /* Soviele ULs wie nötig einfügen. */
                                        
                        ?>
                                            <ul>
                                        <?php
                                            $i
                        ++;
                                        }
                                        
                        $tago TRUE;
                                    }
                                if(
                        $i !== $navi->history) {            /* Wenn eine neue Ebene da ist(also wenn i nicht mehr mit history übereinstimmt). */
                                    
                        $tago FALSE;
                                    
                        $i2 1;
                                    
                        $close 0;
                                    while(
                        $close == $i2) {            /* Die alten ungeschlossenen UL-Tags schliessen. */
                                    
                        ?>
                                        </ul>
                                    <?php
                                        $close
                        ++;
                                    }
                                    while(
                        $i == $navi->history) {        /* Neue UL-Tags für Ebene öffnen. */
                                        
                        echo "<ul>";
                                        
                        $i++;
                                    }
                                    
                        $tago TRUE;
                                }
                                echo 
                        $navi->title;
                            }
                        }
                        }
                        ?>
                        Die variable $api wird übrigens weiter oben im Quelltext definiert, das ist die Variable die die ID der aktuellen Seite beinhaltet.

                        Ich hoffe du verstehst meine Entscheidung und entschuldige mich das die Lösungen umsonst waren. Doch ganz umsonst waren Sie nicht. Ich hab nun einige neue Funktionen(z.B. is_array) gelehrt(auch mit PHP-Manual).

                        Findet irgendwer im Forum den Fehler im Script? Oder hab' ich einen überlegungsfehler gemacht?

                        MFG
                        [ASTERIX]

                        [EDIT]
                        Die ausgabe sollte übrigens Folgendermassen aussehen(tut sie aber nicht):
                        HTML-Code:
                        <ul>
                        	<li>Startseite</li>
                        	<ul>
                        		<li>Sub1</li>
                        	</ul>
                        	<ul>
                        		<ul>
                        			<li>Sub1A</li>
                        		</ul>
                        	</ul>
                        </ul>
                        Zuletzt geändert von andre.roesti; 31.10.2007, 21:19.

                        Kommentar


                        • #13
                          AW: Navigation

                          Hi,
                          mal ein grundsätzlicher Tip von mir. Sowas:
                          PHP-Code:
                              ?>
                                  <li><a href="<?php echo $navi->path?>" title="<?php echo $navi->title_alternative?>"><?php echo $navi->title?></a></li>
                              <?php
                          ist wirklich übelst und extrem schwer lesbar.
                          Du solltest die komplette Navigation in einem PHP-Bereich ausgeben, dann fallen Dir Fehler vielleicht auch eher auf.

                          Gruß
                          Ingo
                          Ingo Webdesign

                          Kommentar


                          • #14
                            AW: Navigation

                            Hallo,

                            Da hat halt jeder so sein eigener Stil. Mir gefällts so besser...

                            MFG
                            [ASTERIX]


                            Edit (autom. Beitragszusammenführung):

                            Der neue Code, der dem Ergebniss schon ein bisschen näher ist:
                            PHP-Code:
                            <?php
                            $naviqd 
                            "SELECT * FROM blophoweso_navi ORDER BY id";
                            $naviquery mysql_query($naviqd);

                            $tago "FALSE"/* Boolensche variable hat komischerweise nicht funktioniert, ist zuständig für die öffnung von UL-Tags. */
                            while($navi mysql_fetch_object($naviquery)) {
                                if(
                            $navi->history == 1) { /* Erste ebene */
                                
                            ?>
                                    <li><a href="<?php echo $navi->path?>" title="<?php echo $navi->title_alternative?>"><?php echo $navi->title?></a></li>
                                <?php
                                
                            } else {
                                    if(
                            $navi->top_id <= $api) { /* Wenn die Seiten zur jetzigen passt. */
                                        
                            if($tago == "FALSE") { /* Wenn UL-Tags ungeöffnet. */
                                            
                            $i 1;
                                            while(
                            $i <= $navi->history) { /* Soviele Tags wie nötig einfügen */
                                            
                            ?>
                                                <ul>
                                            <?php
                                                $i
                            ++;
                                            }
                                            
                            $tago "TRUE";
                                        }
                                    if(
                            $i !== $navi->history) { /* Wenn eine neue Ebene angefangen hat entspricht der(alte) Wert i nicht mehr der aktuellen Ebene */
                                        
                            $tago FALSE/* Also neue Tags oeffnen. */
                                        
                            $close 1;
                                        while(
                            $close == $i) { /* Und die geöffneten Tags von der vorherigen ebene wieder schliessen */
                                        
                            ?>
                                            </ul>
                                        <?php
                                            $close
                            ++;
                                        }
                                        
                            $i 0;
                                        while(
                            $i <= $navi->history) { /* Neue Tags fuer diese Ebene oeffnen */
                                            
                            echo "<ul>";
                                            
                            $i++;
                                        }
                                        
                            $tago TRUE/* Jetzt sind die Tags geoeffnet. */
                                    
                            }
                                    echo 
                            $navi->title/* ..und die ausgabe. */
                                
                            }
                            }
                            }
                            ?>
                            Aber ganz funzts noch nicht... Ich verzweifel fast ab diesem Code. Der sollte doch funktionieren???
                            Zuletzt geändert von andre.roesti; 01.11.2007, 21:09. Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!

                            Kommentar


                            • #15
                              AW: Navigation

                              Hi,
                              Zitat von [ASTERIX] Beitrag anzeigen
                              Da hat halt jeder so sein eigener Stil. Mir gefällts so besser...
                              das ist übrgens nicht nur eine Frage des Geschmacks (und der Übersichtlichkeit), sondern u.U. auch der Validität. So ist z.B. <ul></ul> fehlerhaft, weil kein LI enthalten ist.
                              Wo ist in Deinem Code übrigens die öffnene <ul>?

                              Gruß
                              Ingo
                              Ingo Webdesign

                              Kommentar

                              homepage-forum.de - Hilfe für Webmaster! Statistiken

                              Einklappen

                              Themen: 56.736   Beiträge: 429.436   Mitglieder: 28.490   Aktive Mitglieder: 41
                              Willkommen an unser neuestes Mitglied, KoaLa13bfp.

                              Online-Benutzer

                              Einklappen

                              197 Benutzer sind jetzt online. Registrierte Benutzer: 0, Gäste: 197.

                              Mit 3.502 Benutzern waren am 23.01.2020 um 18:20 die meisten Benutzer gleichzeitig online.

                              Die neuesten Themen

                              Einklappen

                              • daniel5959
                                Antwort auf Liste von Teammitgliedern
                                Hallo,

                                was ist mit "erreichbare Teammitglieder" gemeint?

                                Es gibt ...



                                ... siehe auch "Benutzerliste.

                                daniel5959 ...
                                Gestern, 23:48
                              • Megabyte
                                Antwort auf HEVC / H.265 in HTML5?
                                Also imho wird das über laaaaaaange Zeit nichts werden mit HEVC auf breiter Ebene. Die Nachfrage nach im 2stelligem Gigabyte-Bereich liegende Streaminginhalte ist nur bei ein paar "Ultras" da. Keiner der namhaften Streamer hat in irgendeiner Form Interesse daran gezeigt. Dem gegenüber stehen...
                                Gestern, 23:39
                              • daniel5959
                                Antwort auf HEVC / H.265 in HTML5?
                                Hallo,

                                was soll der Link? - es kommt Fehler 404, also Seite nicht gefunden.

                                Bei der verlinkten Firma geht es nicht um Videos, auch wenn auf der Webseite "mediaconverter" steht, sondern um Autos.



                                daniel5959 ...
                                Gestern, 23:29
                              • Megabyte
                                Antwort auf Welchen Websiten Editior
                                Wenn ich auf's Datum sehe ist mein Post wohl nicht sehr zeitnah *lol*

                                Die Frage nach DEM Editor ist unter Codern wie zwischen BMW und Mercedes :-). Wordpress (eigentlich kein Editor im eigentlichen Sinn) ist von der Bedienung und der Möglichkeiten her ein sehr gutes Produkt. Ich habe aber...
                                Gestern, 23:24
                              • shamshaga
                                Liste von Teammitgliedern
                                Gibt es irgendwo eine Liste von erreichbaren Teammitgliedern von diesem Forum?
                                Gestern, 23:11

                              Die neuesten Beiträge

                              Einklappen

                              Lädt...
                              X