Chris Jasra: Simples Breadcrumb?

Hey,

ich möchte in eine Website, die aus drei php-Seiten besteht (Head, jeweilige Unterseite und Fußleiste), eine simple Breadcrumb-Navigation, also eine Art Adressleiste, in den Headbereich einbauen.

Nun gibt es verschiedene Möglichkeiten zur Realisierung z.B. mehrere untergeordnete Ordner, die den momentanen Aufenthaltsort darstellen, auf dem Server zu erstellen und dort jede einzelne Site als index.xxx zu speichern und durch javascript bzw. php auszulesen, was ich persönlich unelegant finde.

Schöner finde ich den Ansatz, dass in jeder Unterseite ein Code-Schnipsel notiert ist, der ausgelesen und in den entsprechenden Head eingefügt wird, da sich ein Aufwand von einem Datenbank-System für diese Website nicht lohnen würde (und ich auch keine Ahnung von Datenbanken habe)

Das heißt, die Unterseite wird geladen, der Head und die Fußleiste werden über die php-Funktion include nachgeladen und schließlich wird der Code-Schnipsel (eine Art Konstante) von der Unterseite in die Adressleiste vom Head geladen.

Würde sich dieses Konzept mittels php, Javascript etc. überhaupt realisieren lassen?

Danke im Voraus für Antworten :)
Chris Jasra

  1. Wenn man das rein serverseitig machen möchte, wäre eine elgante Variante den Pfad einfach via URL mit zuliefern. Vorteil weiterhin wäre, das man die URL kopieren kann und wieder auf der gleichen Seite landet.

    Via JavaScript ist das zwar grundsätzlich möglich allerdings darf man nicht vergessen das es Leute gibt, die immer noch angst vor Dingen haben, die sie nicht verstehen. Sprich JavaScript deaktiviert haben.

    Ein Problem des nachträglichen Eintragens ist es, das die meisten Elemente bereits mittels 'echo' ausgegeben wurden und somit nichts mehr dazwischen geschrieben werden kann (man korrigiere mich, wenn ich falsch liege). Um dem aus dem Weg zu gehen, könnte man statt 'echo' die Inhalte in einer Variable speichern. Das Element das dann Später die Breadcrumb-Navigation bekommen soll bekommt als inhalt bspw. ()ssdfsdfsfds/()GFSDFAE§. Sprich irgendetwas das durch php nicht interpretiert ist und garantiert einmalig auf der Seite ist. Anschließend kann man diese Kennzeichnung mittels Replace ersetzen und dann die Variable mittels 'echo' ausgeben.

    Mir ist die Umsetzung egal, ich erzähl dir auch was zu JavaScript wenn du das wissen möchtest ;)

    1. Wenn man das rein serverseitig machen möchte, wäre eine elgante Variante den Pfad einfach via URL mit zuliefern. Vorteil weiterhin wäre, das man die URL kopieren kann und wieder auf der gleichen Seite landet.

      Hätte aber doch auch den Nachteil, dass beim Aufrufen der Site über eine Domain standardmäßig die index.xx-Datei ohne Pfad-Angabe für die Adressleiste aufgerufen wird (zmdst. ist das bei Strato-Domains so)

      Um dem aus dem Weg zu gehen, könnte man statt 'echo' die Inhalte in einer Variable speichern. Das Element das dann Später die Breadcrumb-Navigation bekommen soll bekommt als inhalt bspw. ()ssdfsdfsfds/()GFSDFAE§. Sprich irgendetwas das durch php nicht interpretiert ist und garantiert einmalig auf der Seite ist. Anschließend kann man diese Kennzeichnung mittels Replace ersetzen und dann die Variable mittels 'echo' ausgeben.

      Das Prinzip ist mir so einigermaßen klar, jedoch verstehe ich die Durchführung nicht.
      Ich soll also in der Unterseite eine Variable mit (auf der Seite) einmaligen Inhalt notieren, die mittels str_replace den richtigen Inhalt bekommt?

      <?php  
      $variable = "ssdfsdfsfds";  
        
      session_start();  
      $_SESSION["variable2"] = str_replace("ssdfsdfsfds","Blog",$variable);  
      ?>
      

      Im Head notiere ich nur noch, dass die veränderte Variable mittels echo ausgegeben wird?

      <?php  
      session_start();  
      echo $_SESSION["variable2"];  
      ?>
      

      Die Variable muss irgendwie von der Unterseite zum Head übergeben werden, also hab ich gegooglet und bin auf SESSION gestoßen, die dann zur Verwendung kommen.
      Vielleicht sollte genau das mit deiner Idee (die ich wohl missverstanden habe) umgangen werden. Jetzt werden zwar die Variablen weitergegeben (auch ohne die str_replace-Funktion, die ja sowieso eigentlich einen anderen Zweck erfüllen sollte), wechselt man jedoch zu einem Menüpunkt, bleibt der vorherige in der Adressleiste bestehen. Erst wenn ich wieder auf den neuen Menüpunkt nochmals klicke, aktualisiert er sich auch in der Adressleiste.

      Ich arbeite an den Kram jetzt seit mehreren Stunden, kriege aber außer Kopfschmerzen nicht den gewünschten Effekt. Könntest du mir das Prinzip bitte nochmal vereinfachter und die Durchführung ausführlicher erklären?

      Mir ist die Umsetzung egal, ich erzähl dir auch was zu JavaScript wenn du das wissen möchtest ;)

      Die Zielgruppe der Website hat standardmäßig Javascript aktiviert.
      Wenns damit einfacher zu realisieren ist, würde ichs gern wissen :)

      1. Also meine Idee war folgende:
        Man speichert seinen HTML-Code in einer Variable statt echo zu benutzen.
        Beispiel (head.php oder so):

          
        $headHTML = "<html><body>";  
        //... weitere Generierte Code wie die Links und co ...  
        $headHTML = $headHTML."ssdfsdfsfds";  
        //... irgendwann ist diese Datei dann abgearbeitet.  
        // kein echo oder so hier benutzen!!!  
        
        

        Es wurde bis jetzt noch nichts gesendet!!! Das bedeutet du kannst den Inhalt noch nachträglich ändern.

        In der Unterdatei führst du dann irgendwann (am besten ganz oben) folgenden Code aus:
        Beispiel (blog.php)

          
        ...  
        echo str_replace("ssdfsdfsfds","Blog",$headHTML);  
        ...  
        
        

        Der Sinn ist der: Du machst die Ausgabe erst in deiner Unterdatei und kannst jetzt hier festlegen durch was dein Platzhalter "ssdfsdfsfds" ersetzt werden soll. Bei der $_SESSION-Variable werden die Daten zwar auch gespeichert, aber der Code der head.php wird ja erst beim nächsten Aufruf der Seite erneut ausgeführt. Somit erhälst du dann auch den Effekt, dass erst beim nächsten Mal neuladen das richtige angezeigt wird.
        Ich hoffe, dass das gegen Kopfschmerzen hilft ;) Wenn nicht, einfach nochmal fragen!

        Gruß

        Frank

        1. Der Sinn ist der: Du machst die Ausgabe erst in deiner Unterdatei und kannst jetzt hier festlegen durch was dein Platzhalter "ssdfsdfsfds" ersetzt werden soll. Bei der $_SESSION-Variable werden die Daten zwar auch gespeichert, aber der Code der head.php wird ja erst beim nächsten Aufruf der Seite erneut ausgeführt. Somit erhälst du dann auch den Effekt, dass erst beim nächsten Mal neuladen das richtige angezeigt wird.
          Ich hoffe, dass das gegen Kopfschmerzen hilft ;) Wenn nicht, einfach nochmal fragen!

          Gruß

          Frank

          Achso, damit ist es mir nun klar. Da sich meine Adressleiste mitten im Head befindet, habe ich in diesem Fall einfach den Head in zwei Variablen aufgeteilt, die dann beim Zusammenfassen als neue Variable um den Platzhalter gesetzt werden.

          <?php  
          $head = $head1."ssdfsdfsfds".$head2;  
          ?>
          

          Funktioniert also mit dieser Lösung bestens.
          Vielen Dank :)

          Chris Jasra

          1. So gehts natürlich auch. Allerdings kannste dir bei zwei Variablen sogar den Platzhalter sparen. Wenn du wie folgt vorgehst:

              
            echo $head1;  
            echo "deine Leiste";  
            echo $head2;  
            
            

            Dann brauchste noch nicht mal einen Platzhalter und musst auch nichts ersetzen.

            Gruß

            Frank

            1. So gehts natürlich auch. Allerdings kannste dir bei zwei Variablen sogar den Platzhalter sparen. Wenn du wie folgt vorgehst:

              echo $head1;
              echo "deine Leiste";
              echo $head2;

              
              >   
              > Dann brauchste noch nicht mal einen Platzhalter und musst auch nichts ersetzen.  
              >   
              > Gruß  
              >   
              > Frank  
                
              Ja, eigentlich könnte ich auch gleich den Head in zwei php-Dateien speichern und beide in den Unterseiten um die Adressleiste mit php-Include einfügen. Dadurch könnte ich mir die lästige Umformatierung des HTML-Quellcodes in der Variable ersparen.  
                
              Chris Jasra
              
      2. Hi!

        Einige Anmerkungen vorweg:
        Um deine Frage einigermaßen treffend zu beantworten, wäre es u.U. hilfreich, etwas über die Struktur deiner Website zu erfahren und wie du diese bisher (serverseitig) umgesetzt hast.

        Generell sehe ich es bspw. nämlich so, dass man idealerweise gar keine Breadcrumb Navigation braucht, weil die Website eine so flache Hierarchie hat, dass diese schlicht überflüssig ist.

        Da das aber nicht immer (sinnvoll) machbar ist, gibt es also durchaus auch Fälle, wo sie angebracht ist. Dabei sollte man dann aber auf keinen Fall auf zusätzliche Techniken bauen, die außerhalb des eigenen Einflussbereichs liegen, wie bspw. Javascript.

        Wenn man das rein serverseitig machen möchte, wäre eine elgante Variante den Pfad einfach via URL mit zuliefern. Vorteil weiterhin wäre, das man die URL kopieren kann und wieder auf der gleichen Seite landet.

        Hätte aber doch auch den Nachteil, dass beim Aufrufen der Site über eine Domain standardmäßig die index.xx-Datei ohne Pfad-Angabe für die Adressleiste aufgerufen wird (zmdst. ist das bei Strato-Domains so)

        Das verstehe ich nicht ganz!? Könntest du bspw. mod_rewrite nutzen? Welche Einstellungen per .htaccess kannst du für den Webspace vornehmen?
        Woher weißt du denn, welche "Unterseite" gerade angefordert wurde? Und entspricht deine Site-Struktur 1:1 deiner File-Struktur auf dem Server?
        Und wenn du eine mehrstufige Breadcrumb Navigation hast, existieren denn dann überhaupt alle Unterseiten?

        Um dem aus dem Weg zu gehen, könnte man statt 'echo' die Inhalte in einer Variable speichern. Das Element das dann Später die Breadcrumb-Navigation bekommen soll bekommt als inhalt bspw. ()ssdfsdfsfds/()GFSDFAE§. Sprich irgendetwas das durch php nicht interpretiert ist und garantiert einmalig auf der Seite ist. Anschließend kann man diese Kennzeichnung mittels Replace ersetzen und dann die Variable mittels 'echo' ausgeben.

        Das Prinzip ist mir so einigermaßen klar, jedoch verstehe ich die Durchführung nicht.
        Ich soll also in der Unterseite eine Variable mit (auf der Seite) einmaligen Inhalt notieren, die mittels str_replace den richtigen Inhalt bekommt?

        Oder aber eine Funktion in die head.php einbauen, die den Breadcrumb Trail in Abhängigkeit von der angeforderten Seite generiert.

        Die Variable muss irgendwie von der Unterseite zum Head übergeben werden, also hab ich gegooglet und bin auf SESSION gestoßen, die dann zur Verwendung kommen.
        Vielleicht sollte genau das mit deiner Idee (die ich wohl missverstanden habe) umgangen werden. Jetzt werden zwar die Variablen weitergegeben (auch ohne die str_replace-Funktion, die ja sowieso eigentlich einen anderen Zweck erfüllen sollte), wechselt man jedoch zu einem Menüpunkt, bleibt der vorherige in der Adressleiste bestehen. Erst wenn ich wieder auf den neuen Menüpunkt nochmals klicke, aktualisiert er sich auch in der Adressleiste.

        Sessions sind in diesem Kontext imho genauso untauglich wie die Verwendung von Javascript.

        Ich arbeite an den Kram jetzt seit mehreren Stunden, kriege aber außer Kopfschmerzen nicht den gewünschten Effekt. Könntest du mir das Prinzip bitte nochmal vereinfachter und die Durchführung ausführlicher erklären?

        Es soll ja auch diverse Scripte für Wikis, Blogs, etc. geben, wo so etwas enthalten ist. Mal zu gucken, wie andere solch eine Geschichte umgesetzt haben, wäre ja auch eine Möglichkeit. Zugegebenermaßen nicht die einfachste & schnellste Variante, aber ... .

        Mir ist die Umsetzung egal, ich erzähl dir auch was zu JavaScript wenn du das wissen möchtest ;)

        Die Zielgruppe der Website hat standardmäßig Javascript aktiviert.

        Ich halte es grundsätzlich für den verkehrten Ansatz im Web für eine bestimmte Zielgruppe zu entwickeln. Bei Intranet Anwendungen u.ä. mag das ja anders sein.

        Wenns damit einfacher zu realisieren ist, würde ichs gern wissen :)

        Einfacher ist immer relativ, aber auch nicht der entscheidende Punkt. Sondern vielmehr sollte die Frage lauten, welches die geeignetste Technik für die Umsetzung eines Vorhabens ist.

        Gruß Gunther

        1. Hallo,

          Um deine Frage einigermaßen treffend zu beantworten, wäre es u.U. hilfreich, etwas über die Struktur deiner Website zu erfahren und wie du diese bisher (serverseitig) umgesetzt hast.
          [...]
          Ich halte es grundsätzlich für den verkehrten Ansatz im Web für eine bestimmte Zielgruppe zu entwickeln. Bei Intranet Anwendungen u.ä. mag das ja anders sein.

          Das einzig serverseitige ist die Einbindung des Heads und der Fußleiste über die php-Funktion include in die jeweilige Unterseite. Der Rest besteht aus xhtml und css.
          Die Website wird maximal 10-15 Seiten haben und ist für eine Kollegstufe entworfen, also für Schüler, die moderne Browser benutzen und damit eigentlich auch Javascript verwenden müssten (was jetzt aber durch eine php-Lösung sowieso nicht mehr notwendig ist und die Problematik mit ausgeschaltetem Javascript löst).

          Generell sehe ich es bspw. nämlich so, dass man idealerweise gar keine Breadcrumb Navigation braucht, weil die Website eine so flache Hierarchie hat, dass diese schlicht überflüssig ist.

          Unbedingt notwendig ist es zwar nicht, stellt aber dennoch ein ganz nützliches Design-Element dar.

          Es soll ja auch diverse Scripte für Wikis, Blogs, etc. geben, wo so etwas enthalten ist. Mal zu gucken, wie andere solch eine Geschichte umgesetzt haben, wäre ja auch eine Möglichkeit. Zugegebenermaßen nicht die einfachste & schnellste Variante, aber ... .

          Wie im ersten Post bereits gesagt habe ich nach entsprechenden Lösungen gegooglet, aber keine bot ein solch simples Prinzip an, das ich im Endeffekt mit meinem geringen php-Wissen auch verstehen kann. Auch wenn sich php für Sites immer mal wieder rentieren wird, habe ich leider nicht die Zeit, mich in die Materie tief einzuarbeiten, um komplexe Skripte zu schreiben.
          Aber da ich nun eine simple php-Lösung habe, ist das Problem gelöst. Somit vielen Dank für die Ratschläge.

          Chris Jasra