This page has been robot translated, sorry for typos if any. Original content here.

SSI in den Beispielen

Vor allem die Gründe, warum ich diesen Artikel geschrieben habe: Diskussionen der Mitglieder des Allrussischen Club of Webmasters haben sich oft darüber gestritten, was bei wiederholten Markup (Informationen) auf einer großen Anzahl von Seiten - Frames, JavaScript oder SSI (Server Side Includes) zutreffen sollte. Ich bin der festen Überzeugung, dass Frames nur dort verwendet werden sollten, wo wirklich keine Möglichkeit besteht, darauf zu verzichten. JavaScript (und alle anderen Client-Skripte) ist zu kapriziös und hängt von den Browsereinstellungen ab, sodass es nur für zusätzliche Funktionen verwendet werden kann Konstruktion, zum Beispiel Navigationssysteme. Ich werde nicht mit Schaum an der Mündung argumentieren, dass SSI-Technologie steiler ist als alle Berge und Eier, aber ich werde einfach Lösungen für Probleme geben, die in der Praxis häufig mit der Verwendung dieser Technologie auftreten.

(Unmittelbar voraussehen die Empörung der Anhänger der ASP- und PHP-Technologien, mit denen Lösungen ähnlicher Aufgaben auch deshalb besonders für sie möglich sind: Die SSI-Technologie ist viel einfacher, sie hat nur ein Dutzend Operationen, also für einen Nicht-Programmierer ist das eine bessere Wahl, schon weil es kann schnell gemeistert werden)

Datum der letzten Änderung des Dokuments

Einfache Richtlinie:

  <! - # echo var = "LAST_MODIFIED" -> 

Die heutige Nummer im gewünschten Format

Wenn wir das Datum nicht im Standardformular für die Konfiguration der Software anzeigen müssen, sondern was wir brauchen (zum Beispiel "Dienstag, 30. Mai 2000"), können wir folgendes Design verwenden: Den Wochentag ermitteln

  <! - # config timefmt = "% u" ->
 <! - # set var = "NUM_DAY" Wert = "$ DATE_LOCAL" ->
 <! - # if expr = "$ NUM_DAY = 1" ->
 <! - # set var = "DAY" Wert = "Montag" ->
 <! - # elif expr = "$ NUM_DAY = 2" ->
 <! - # set var = "DAY" Wert = "Dienstag" ->
 <! - # elif expr = "$ NUM_DAY = 3" ->
 <! - # set var = "DAY" value = "Umgebung" ->

 <! - # elif expr = "$ NUM_DAY = 4" ->
 <! - # set var = "DAY" Wert = "Donnerstag" ->
 <! - # elif expr = "$ NUM_DAY = 5" ->
 <! - # set var = "DAY" Wert = "Freitag" ->
 <! - # elif expr = "$ NUM_DAY = 6" ->
 <! - # set var = "DAY" value = "Samstag" ->
 <! - # sonst ->
 <! - # set var = "DAY" Wert = "Sonntag" ->
 <! - # endif -> 

Die Nummer bekommen

  <! - # config timefmt = "% e" ->
 <! - # set var = "DATE" value = "$ DATE_LOCAL" -> 

Den Namen des Monats erhalten

  <! - # config timefmt = "% m" ->
 <! - # set var = "NUM_MONTH" value = "$ DATE_LOCAL" ->
 <! - # if expr = "$ NUM_MONTH = 01" ->
 <! - # set var = "MONTH" value = "Januar" ->
 <! - # elif expr = "$ NUM_MONTH = 02" ->

 <! - # set var = "MONTH" value = "Februar" ->
 <! - # elif expr = "$ NUM_MONTH = 03" ->
 <! - # set var = "MONTH" value = "März" ->
 <! - # elif expr = "$ NUM_MONTH = 04" ->
 <! - # set var = "MONTH" value = "April" ->
 <! - # elif expr = "$ NUM_MONTH = 05" ->
 <! - # set var = "MONTH" value = "Mai" ->
 <! - # elif expr = "$ NUM_MONTH = 06" ->
 <! - # set var = "MONTH" value = "Juni" ->

 <! - # elif expr = "$ NUM_MONTH = 07" ->
 <! - # set var = "MONTH" value = "Juli" ->
 <! - # elif expr = "$ NUM_MONTH = 08" ->
 <! - # set var = "MONTH" value = "August" ->
 <! - # elif expr = "$ NUM_MONTH = 09" ->
 <! - # set var = "MONTH" value = "September" ->
 <! - # elif expr = "$ NUM_MONTH = 10" ->
 <! - # set var = "MONTH" value = "Oktober" ->
 <! - # elif expr = "$ NUM_MONTH = 11" ->

 <! - # set var = "MONTH" value = "November" ->
 <! - # sonst ->
 <! - # set var = "MONTH" value = "Dezember" ->
 <! - # endif -> 

Das Jahr erhalten

  <! - # config timefmt = "% G" ->
 <! - # set var = "YEAR" value = "$ DATE_LOCAL" -> 

Die tatsächliche Ausgabe der resultierenden Zeichenfolge

  <! - # echo var = "TAG" ->,

 <! - # echo var = "DATE" ->
 <! - # echo var = "MONAT" ->,
 <! - # echo var = "JAHR" ->

Parameter für config timefmt sollten für jede Konfiguration des Webservers separat betrachtet werden. Das obige Beispiel ist FreeBSD, Apache. Weitere Informationen finden Sie unter man timefmt
Ein ähnliches Design wird auf der Website des Online-Shops Levingston.Ru verwendet

Datum der Änderung der externen Datei

Oft auf Computer-Websites verbreiten eine Preisliste im MS Excel oder Word-Format und jedes Mal, wenn sie das Datum ihrer Herstellung mit ihren Händen aufschreiben. Mit SSI geschieht dies ungefähr wie folgt:

  <a href=pricelst.doc> Preisliste </a>

 <! - # config timefmt = "% d.% m.% y" ->
 (MS Word 6.0 / 95, <! - # flastmod virtuell = "pricelst.doc" ->) 

Dieses Design wird auf der Duncan Service- Website verwendet

Der Kampf gegen <noframes>

Normalerweise schreiben Sie in diesem Container "Entschuldigung, aber Sie sollten den Browser aktualisieren", theoretisch sollte es eine Alternative für Benutzer älterer Versionen von Browsern geben. Da auf einem normalen Server die Informationen oft geändert werden und der Webmaster jedes Mal faul ist, Änderungen an zwei Stellen vorzunehmen. Mit SSI ist das Problem ein für allemal gelöst: Eine Anweisung wird in den Container <noframes> </ noframes> eingefügt und fügt dieselbe Datei ein, in der die Änderungen oder einfach die Navigationsleiste vorgenommen wird.

Bekämpfen von direkten Links zu Dokumenten auf einer Website mit Frames

Eines der Argumente gegen die Verwendung von Frame-Strukturen beim Erstellen von Websites ist die Unannehmlichkeit direkter Links zu Inhaltsdateien. Wenn Sie beispielsweise von Suchmaschinen oder einem bestimmten Dokument (Nicht-Root-Dokument) von einer anderen Website aus verlinken, trifft der Benutzer eine Seite ohne Design- oder Navigationselemente, die normalerweise in einem separaten Navigationsrahmen platziert sind. Mit Hilfe eines einfachen SSI-Designs kann dieses Problem gelöst werden. Dazu müssen Sie analysieren, woher der Benutzer kam (Variable HTTP_REFERER) Wenn er nicht von unserem Server kam, sondern von außen - um die Rahmenstruktur zu konstruieren und das vom Benutzer angeforderte Dokument als sinnvollen Rahmen zu ersetzen.

Im Beispiel unten ist die Datei content.html das Dokument, auf das direkt verwiesen wird (z. B. von der Suchmaschine). Frame.html ist die Datei, in der die Rahmenstruktur erstellt wird. QUERY_STRING ersetzt den Wert, der ausgeführt wird, um die unendliche Verschachtelung von Rahmenstrukturen zu vermeiden.

Datei content.html

  <html>
 <Kopf>
 ...
 <! - # include virtual = "frame.html" ->
 </ Kopf>
 <Körper>

 ...
 </ body>
 </ html> 

Datei frame.html

  <! - # if expr = "$ QUERY_STRING! = erledigt && $ HTTP_REFERER! = / Ihre_Domain \ .ru /" ->
 <frameset rows = "150, *">
 <frame name = "NAVIGATION" src = "/ navigation.html">
 <frame name = "CONTENT" src = "<! - # echo var =" DOCUMENT_URI "->? done">

 </ frameset>
 <! - # endif -> 

Ein ähnliches Design wird auf der Website des Online-Shops Bolero verwendet

Version der Seite zum Drucken

Oft gibt es ein angewandtes Problem - ein schönes mehrspaltiges Design mit oberen und unteren Kappen, eine Wolke von Bannern, aber wenn Sie alles drucken - überschüssiges Papier, unnötige Informationen ... Deshalb möchte ich eine einfache alternative Seitenansicht spezifisch für den Druck machen. Um dies zu tun, genügt es, zwei Versionen der oberen und unteren Kappen vorzubereiten, eine für die Bildschirmdarstellung, die andere für das Drucken. Um zwischen diesen Optionen zu wechseln, verwenden Sie die Variable QUERY_STRING. Im Folgenden sind die grundlegenden Strukturen für die Seite selbst (file.html) und für die oberen und unteren Caps (top.html und bottom.html) aufgeführt.

Struktur der Seite selbst (file.html):

  <! - # include virtual = "top.html? $ QUERY_STRING" ->
 hier der Körper des Dokuments
 <! - # include virtuell = "bottom.html? $ QUERY_STRING" -> 

Struktur top.html und bottom.html

  <! - # if expr = "$ QUERY_STRING == / for_printing /" ->
 Druckkappe
 <! - # sonst ->
 Kopfzeile zum Anzeigen
 <! - # endif -> 

Der Link auf jeder Seite sollte die Form haben

  <a href=<"!--echo var="$DOCUMENT_URI" -->? for_printing
 > druckbare Version </a> 

Ein ähnliches Design wird auf der Website des Allrussischen Club of Webmasters verwendet

Kampf gegen Menüpunkte

Angenommen, wir haben mehrere Abschnitte der Website, die Dokumente zu den Abschnitten befinden sich in verschiedenen Verzeichnissen. Die Aufgabe besteht darin, den Verweis auf den Abschnitt, in dem sich der Benutzer gerade befindet, auf diesen Abschnitten im Navigationsmenü zu machen (oder nicht hervorgehoben, in einer anderen Farbe hervorgehoben usw.). Um dies zu tun, können Sie die Variable DOCUMENT_URI verwenden.

  <! - # if expr = "$ DOCUMENT_URI! = / ^ \ / index.html /" ->
 <a href="/"> Erste Seite </a> <br>
 <! - # endif ->

 <! - # if expr = "$ DOCUMENT_URI! = / \ / about \ /index.html/" ->
 <a href="/about/"> Über uns </a> <br>
 <! - # endif ->
 <! - # if expr = "$ DOCUMENT_URI! = / \ / done \ / index.html" ->
 <a href="/done/"> Unsere Arbeit </a> <br>
 <! - # endif ->

 <! - # if expr = "$ DOCUMENT_URI! = / \ / partner \ /index.html/" ->
 <a href="/partner/"> Unsere Partner </a> <br>
 <! - # endif ->
 <! - # if expr = "$ DOCUMENT_URI! = / \ / client \ /index.html/" ->
 <a href="/client/"> Unsere Kunden </a> <br>
 <! - # endif ->

 <! - # if expr = "$ DOCUMENT_URI! = / \ / price \ /index.html/" ->
 <a href="/price/"> Unsere Preise </a> <br>
 <! - # endif ->
 <! - # if expr = "$ DOCUMENT_URI! = / \ / contacts \ /index.html/" ->
 <a href="/contacts/"> Unsere Koordinaten </a> <br>
 <! - # endif ->

 <! - # if expr = "$ DOCUMENT_URI! = / \ / history \ /index.html/" ->
 <a href="/history/"> Unsere Geschichte </a> <br>
 <! - # endif ->
 <! - # if expr = "$ DOCUMENT_URI! = / \ / search.html /" ->
 <a href="/search.html"> Suche </a> <br>
 <! - # endif -> 

Ein ähnliches Design wird von der Web 2000- Website verwendet

Kontextabhängige Textausgabe in Abhängigkeit von den Bedingungen

Angenommen, wir haben eine Aufgabe, um das Aussehen der ersten Seite des Knotens zu ändern, abhängig davon, woher der Benutzer kam. Um diese Aufgabe zu implementieren, wird folgende Konstruktion verwendet:

  <! - # if expr = "$ HTTP_REFERER = / www.zzz.ru /" ->
 Hier werden die notwendigen Maßnahmen getroffen
 <! - # endif -> 

dh. Die Variable HTTP_REFERER wird verglichen

Bekämpfen verschiedener Versionen des Designs für verschiedene Browser

Jeder weiß, dass Browser verschiedener Hersteller und Versionen das gleiche HTML-Markup des Dokuments anzeigen, angefangen von speziellen Tags und Attributen bis hin zu verschiedenen Versionen von JavaScript. Damit die Website für eine Version des Browsers und für die andere gut aussieht oder um JavaScript-Fehler mit SSI zu vermeiden, können Sie nach Versionen oder Browsern suchen und verschiedene HTML-Markup-Optionen ausgeben. Dazu wird die Variable HTTP_USER_AGENT analysiert, die Informationen über den Typ und Hersteller des Browsers enthält:

  <! - # if expr = "$ HTTP_USER_AGENT = / Mozilla \ / 4 / || $ HTTP_USER_AGENT = / Mozilla \ / 5 /" ->
 Wenn die Browserversion nicht mit 4 oder 5 identisch ist, geben Sie die Option aus
 B. mit DHTML
 <! - # sonst ->
 Hier können Sie ein einfaches Design bekommen
 <! - # endif ->

Eine ähnliche Konstruktion wurde verwendet, um die Rahmenstruktur aufzubauen und das interne Menü (für Netscape - für DHTML, für MSIE - für ActiveX) auf der Website der Zeitschrift "OM" anzuzeigen.

Der Kampf mit dem Design der Ergebnisse der Arbeit von Skripten

Das größte Problem bei Scripts liegt darin, dass bei einer großen Menge an Software bei der Änderung des Designs diese neu konfiguriert werden müssen. Nun, wenn die Software korrekt ausgeführt wird und das Ändern der Anzeigevorlagen nicht die Mathematik selbst betrifft, gibt es in solchen Fällen jedoch Probleme. Auf der Suchseite wäre es beispielsweise gut, Banner und Werbenetzwerke zu verdrehen, aber SSI-Anweisungen sind nicht in .cgi-Dateien implementiert. Solche Probleme können Sie mit SSI folgendermaßen lösen: Bearbeiten Sie die Anzeigevorlagen nicht mit dem Skript, sondern rufen Sie das Skript über SSI aus dem HTML-Dokument auf (so können Sie leider nur mit den Skripten arbeiten, die die GET-Methode verwenden - die Variable CONTENT_LENGTH ist in SSI nicht verfügbar) So wie es gemacht wird, gibt es ein HTML-Dokument, das in einem allgemeinen Designstil gekennzeichnet ist. Es fügt eine Direktive ein

  <! - # include virtuell = "/ cgi-bin / script.cgi? $ QUERY_STRING" -> 

Im ersten Schritt, während QUERY_STRING leer ist - der erste Schritt des Skripts wird aufgerufen, in den nachfolgenden Schritten des Skripts - werden die notwendigen Parameter übertragen. Im Skript selbst sind drei Zeilen wichtig:

  ...
 # Definition der Adresse, an die die Daten gesendet werden sollen
 $ query = $ ENV {QUERY_STRING};
 # Definition des Ortes, von dem aus das Skript aufgerufen wurde
 $ uri = $ ENV {DOKUMENT_URI};
 ...
 # Senden von Daten an dasselbe HTML-Dokument, von dem aus das Skript aufgerufen wurde
 print "<form action = $ uri method = get> \ n";
 ... 

Ein ähnliches Design wurde im Bereich " Votings " für den Online-Supermarkt Levingston.Ru verwendet

Was kann ich mit Cookie und SSI tun?

Es gibt oft ein JavaScript-Konstrukt, das "Hallo, Ivan Ivanych!" wenn Sie die Seite der Website besuchen. Das Gleiche kann mit der SSI-Direktive gemacht werden

  <! - # echo var = "HTTP_COOKIE" -> 

Banner, Caching und SSI

Gesendet von Kiril Khlopov (NewTech)

Wie Sie wissen, bieten Bannersysteme an, im Code einen zufälligen Wert in die URL des Anzeigeskripts aufzunehmen - Schutz gegen Zwischenspeichern.

  • Sie können die gesamte Seite mit einem Skript vom ersten bis zum letzten Zeichen erstellen
  • Sie können tun, wie beraten Seiten Bannersysteme - durch SSI-Skript, ein zufälliges Banner generieren
  • Zeichnen Sie einen Teil des Dokuments dynamisch mit dem JavaScrip-Bannercode auf

Und es ist noch möglich:

  <! - # config timefmt = "% s" ->

 <! - # set var = "RND" value = "$ DATE_LOCAL" ->
 <! - Russian LinkExchange-Code START ->
 <iframe src = http://www.linkexchange.ru/cgi-bin/erle.cgi? einige_id?
 <! - # echo var = "RND" ->
 frameborder = 0 vspace = 0 hspace = 0 width = 468 height = 60 margin width = 0
  marginheight = 0 scrolling = nein>
 <a href=http://www.linkexchange.ru/users/some_id/goto.map target=_top>
 <img src = http: //www.linkexchange.ru/cgi-bin/rle.cgi? <! - # echo var = "RND" ->
 alt = "RLE-Banner-Netzwerk" Rahmen = 0 Höhe = 60 Breite = 468> </a>

 </ iframe>
 <! - Russian LinkExchange-Code END -> 

Das heißt, wie eine Zufallsvariable die Anzahl der Sekunden ab 1970 ausführt. Die Zeit ist nicht verschwendet und der Speicher zum Ausführen des Script-Generators, Java-Script (wie es bei einigen Benutzern jetzt Mode ist) kann abgeschaltet werden. Meiner Meinung nach ist es ziemlich rosig Lächeln glücklich
All dies wird von unserem Administrator auf www.j2.ru überprüft und verwendet

Eine Display-Vorlage - anderer Inhalt

Gesendet von Eugene Bespalchikov (KADIS)

Oft verwenden Vorlagen diese Methode: <> Es gibt nur eine Datei, die die Struktur der Seite beschreibt, und der Hauptinhalt wird von der Direktive eingeschlossen

  <! - # include virtual = "$ QUERY_STRING.html" -> 
Links werden wie folgt aussehen:
  href = "www.your_domain.com/index.html?page1"
 href = "www.your_domain.com/index.html?page2"
 ... 

Das Problem tritt auf, wenn der Benutzer die Adresse direkt http://www.your_domain.ru wählt, d.h. QUERY_STRING = ""

Lösung:

  <! - # if expr = "$ QUERY_STRING" ->
 <! - # include virtual = "$ QUERY_STRING.html" ->
 <! - # sonst ->
 <! - # include virtual = "default.html" ->

 <! - # endif -> 

Dabei ist default.html die Seite des Wurzelverzeichnisses (Inhaltsverzeichnis) und nur ein Stub.