Dave: ssi-include verändern

Hallo,

diesmal habe ich ein kompliziertes Problem:
Ich habe mein komplettes Menu - etwa 50 Zeilen - in eine txt-datei eingebunden, und diese per ssi-include eingeügt in jede seite. Ich will aber, dass die jeweils besuchte Seite mit class="active" (bereits definiert, keine sorge) hervorgehoben wird. Kann mn das ins include einfügen? Und wie?

Danke für alle Antworten
Dave

  1. Hallo Dave,

    Es handelt sich doch sicherlich um, Links? Warum dann eine neue Klasse ?
    Benutze doch die Pseudo-Formate des <a>-Elementes..
    http://selfhtml.teamone.de/css/eigenschaften/pseudoformate.htm#link_visited_hover_active_focus

    Gruss Sven

    1. Hi

      Es handelt sich doch sicherlich um, Links? Warum dann eine neue Klasse ?
      Benutze doch die Pseudo-Formate des <a>-Elementes..
      http://selfhtml.teamone.de/css/eigenschaften/pseudoformate.htm#link_visited_hover_active_focus

      Es geht darum, dass auf der neuen Seite die Links anders angezeigt werden. Machst du das mit einer Pseudo-Klasse, dann wird der Link farblich nur verändert, nachdem du geklickt hast und bis die neue Seite geladen ist.

      Dave

      1. Hallo,

        Es geht darum, dass auf der neuen Seite die Links anders angezeigt werden. Machst du das mit einer Pseudo-Klasse, dann wird der Link farblich nur verändert, nachdem du geklickt hast und bis die neue Seite geladen ist.

        ..das verstehe ich nicht!

        Sven

      2. Hi Dave,

        Es geht darum, dass auf der neuen Seite die Links anders angezeigt werden. Machst du das mit einer Pseudo-Klasse, dann wird der Link farblich nur verändert, nachdem du geklickt hast und bis die neue Seite geladen ist.

        nein, das stimmt nicht. Was du meinst, ist ein M$IE-Bug. Gute Browser wechseln die Farbe auch ohne Reload sofort und wissen, wie lange ein Link :active sein kann...

        LG Orlando

  2. Hallo,

    diesmal habe ich ein kompliziertes Problem:
    Ich habe mein komplettes Menu - etwa 50 Zeilen - in eine txt-datei eingebunden, und diese per ssi-include eingeügt in jede seite. Ich will aber, dass die jeweils besuchte Seite mit class="active" (bereits definiert, keine sorge) hervorgehoben wird. Kann mn das ins include einfügen? Und wie?

    Danke für alle Antworten
    Dave

    also, normalerweise müsste das gehen, dass du du das in die include-datei einfügen kannst.

    häng doch bei jedem link z.B. einfach ein "?site_id=home" an.
    bei deinem menü sagst du dann

    if( $site_id == "home" ){
      echo "class="active"";
      }

    und das bei jedem menü-punkt.

    hoffe, konnt dir ein wenig weiterhelfen.

    1. häng doch bei jedem link z.B. einfach ein "?site_id=home" an.
      bei deinem menü sagst du dann

      if( $site_id == "home" ){
        echo "class="active"";
        }

      und das bei jedem menü-punkt.

      hoffe, konnt dir ein wenig weiterhelfen.

      Das klingt als ob es funktionieren würde, aber wie kann ich das

      if( $site_id...
      ...
      ...

      in die links schreiben? Kommt das einfach in den Tag? Und funktioniert das denn auch in der SSI-Datei? (Ich frage nur so dumm weil ich noch noicht sehr vertraut mit PHP bin)

      Danke

      Dave

  3. HI Dave,

    Ich habe mein komplettes Menu - etwa 50 Zeilen - in eine txt-datei
    eingebunden, und diese per ssi-include eingeügt in jede seite.
    Ich will aber, dass die jeweils besuchte Seite mit class="active"
    (bereits definiert, keine sorge) hervorgehoben wird. Kann mn das ins
    include einfügen? Und wie?

    schau Dir mal die Navigation von
          http://www.schroepl.net/projekte/mod_gzip/
    an. Das ist komplett via SSI gelöst.

    Jedes Dokument ist eine SSI-Seite, welche die Navigation via "include
    virtual" einbindet. (Laß Dich nicht von der Endung ".htm" irritieren.)

    Die Navigation selbst ist aber auch wieder eine SSI-Seite!

    Sie kann in Apaches XSSI bedingte Befehle (if-then-else) enthalten,
    und sie kann Inhalte von Environment-Variablen abfragen. Und eine
    dieser Variablen ist der Name des Dokuments, in welches die Navi-
    gation eingebunden ist.

    Jeder einzelne Button der Navigation ist also ein solches if-then-else:

    <!--#if expr="${REQUEST_URI} = /encoding.htm/" -->
    <p>Content-Encoding</p>
    <!--#else -->
    <a title="Komprimierung von HTTP-Inhalten durch Content-Encoding" href="encoding.htm">Content-Encoding</a>
    <!--#endif -->

    Der SSI-Interpreter generiert also für jede Seite eine Navigation,
    die genau an diese Seite angepaßt ist: Derjenige Button, der ein Link
    auf das Dokument selbst wäre, wird in <p> eingebunden (was wiederum
    mit CSS formatiert ist), alle anderen mit <a>.

    Aber alles aus einer einzigen SSI-Datei! (Naja, in Wirklichkeit sind es
    zwei - eine deutsche und eine englische, via Content Negotiation ...)

    Viele Grüße
          Michael

    1. Hi Michael,

      <!--#if expr="${REQUEST_URI} = /encoding.htm/" -->
      <p>Content-Encoding</p>
      <!--#else -->
      <a title="Komprimierung von HTTP-Inhalten durch Content-Encoding" href="encoding.htm">Content-Encoding</a>
      <!--#endif -->

      faszinierend, ich habe das jetzt mal ausprobiert. Allerdings klappt es leider nicht mehr, wenn ich das obige Konstrukt wiederum in eine eigene Datei auslagern und per SSI einbinden will - der Server arbeitet die Anweisungen in der Include-Datei natürlich nicht ab... Das ist eigentlich schade, denn so könnte man recht einfach für die gesamte Site die Navigation in eine einzige Datei auslagern.

      Vielleicht sollte ich mich wirklich mal mehr mit Perl beschäftigen, ein kleines Script sollte das auch schaffen ;)

      LG Orlando

      1. Hi Orlando,

        faszinierend, ich habe das jetzt mal ausprobiert.
        Allerdings klappt es leider nicht mehr, wenn ich das obige Konstrukt
        wiederum in eine eigene Datei auslagern und per SSI einbinden will

        • der Server arbeitet die Anweisungen in der Include-Datei natürlich
          nicht ab...

        Diese Include-Datei muß selbst natürlich auch wieder eine SSI-Datei
        sein! Meines Wissens kann man das ziemlich tief schachteln.
        (Irgendwo schlägt dann vermutlich ein sanity check zu, um eine Endlos-
        schleife im SSI-Handler zu verhindern - aber bis dahin ist viel Platz. ;-)

        Ich weiß allerdings nicht, ob der REQUEST_URI nicht irgendwann verloren
        geht ... ich habe noch nicht mehr als zwei Stufen ausprobiert.

        Das ist eigentlich schade, denn so könnte man recht einfach für die
        gesamte Site die Navigation in eine einzige Datei auslagern.

        Genau das ist die Idee dabei ... irgendwann werfe ich meine Frameset-
        Halde auf den Müll. (Leider ist die Zahl der anzupassenden Dokumente
        inzwischen vierstellig ...)

        Vielleicht sollte ich mich wirklich mal mehr mit Perl beschäftigen,
        ein kleines Script sollte das auch schaffen ;)

        SSI ist performanter. Und für das hier muß es eigentlich ausreichen.

        Viele Grüße
              Michael

        1. Hi Michael,

          • der Server arbeitet die Anweisungen in der Include-Datei natürlich
            nicht ab...

          Diese Include-Datei muß selbst natürlich auch wieder eine SSI-Datei
          sein! Meines Wissens kann man das ziemlich tief schachteln.

          Ach, das war's - eigentlich logisch. Es funktioniert jetzt prächtig, ich werde die nächste Version meiner Seiten garantiert so aufbauen - einfacher geht's ja nicht mehr :)

          (Irgendwo schlägt dann vermutlich ein sanity check zu, um eine Endlos-
          schleife im SSI-Handler zu verhindern - aber bis dahin ist viel Platz. ;-)

          Eben, ich dachte, deswegen wäre es nicht möglich. Muss ich eben aufpassen, dass mir der Hoster wegen rekursiver Includes nicht eine auf den Deckel gibt ;)

          Ich weiß allerdings nicht, ob der REQUEST_URI nicht irgendwann verloren
          geht ... ich habe noch nicht mehr als zwei Stufen ausprobiert.

          Das kommt auf einen Versuch an, ich werde am Wochenende etwas experimentieren.

          Genau das ist die Idee dabei ... irgendwann werfe ich meine Frameset-
          Halde auf den Müll. (Leider ist die Zahl der anzupassenden Dokumente
          inzwischen vierstellig ...)

          Du kannst dir wenigstens mit Scripts helfen ;)

          Vielleicht sollte ich mich wirklich mal mehr mit Perl beschäftigen,
          ein kleines Script sollte das auch schaffen ;)

          SSI ist performanter. Und für das hier muß es eigentlich ausreichen.

          Das kann ich bestätigen, danke!

          LG Orlando

          1. Hi Orlando,

            Ach, das war's - eigentlich logisch. Es funktioniert jetzt
            prächtig, ich werde die nächste Version meiner Seiten garantiert
            so aufbauen - einfacher geht's ja nicht mehr :)

            Fein. "Wer braucht CMS; es gibt doch SSI?" ;-)
            (Schreib doch mal einen Feature-Artikel darüber ...)

            Eben, ich dachte, deswegen wäre es nicht möglich. Muss ich eben
            aufpassen, dass mir der Hoster wegen rekursiver Includes nicht
            eine auf den Deckel gibt ;)

            Direkt rekursive INCLUDEs merkt der Apache sofort (gerade ausprobiert

            • offenbar speichert er einen Stack der eingebetteten Pfadnamen,
              er erkennt jedenfalls auch abwechselnde INCLUDEs zweier Dateien ...).
              Das ist also gar kein Problem. (Das hat bestimmt vor Jahren mal jemand
              ausprobiert und seinen Provider damit geärgert ...)

            Eine hart-codierte Grenze habe ich im Quelltext (die Neugier ... ;-)
            eben gerade nicht entdecken können (wofür auch, wenn Rekursion erkannt
            wird?).

            Viele Grüße
                  Michael