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

SSI in Beispielen

Zu Beginn über die Gründe, die mich dazu veranlasst haben, diesen Artikel zu schreiben: In den Diskussionen der Mitglieder des Allrussischen Webmasters Clubs kam es zu Streitigkeiten darüber, was im Falle wiederholter Markups (Informationen) auf einer großen Anzahl von Seiten - Frames, JavaScript oder SSI (Server Side Includes) besser zu verwenden ist. Meine tiefe Überzeugung ist, dass Frames nur dort verwendet werden sollten, wo man wirklich nicht darauf verzichten kann. JavaScript (und alle anderen Client-Skripte) ist zu kapriziös und hängt von den Browsereinstellungen ab, so dass es nur für zusätzliche Features verwendet werden kann Gebäude, zum Beispiel Navigationssysteme. Ich werde nicht argumentieren, dass die SSI-Technologie steiler ist als alle Berge und Eier, sondern einfach Lösungen für allgemeine praktische Probleme mit dem Einsatz dieser Technologie bieten wird.

(Ich erwarte sofort Empörung von ASP- und PHP-Unterstützern, mit deren Hilfe die Lösungen solcher Aufgaben auch deshalb möglich sind, besonders für sie: SSI-Technologie ist viel einfacher, es hat nur ein Dutzend Operationen, deshalb für einen Nicht-Programmierer ist das eine bessere Wahl, nur weil es kann schnell gemeistert werden)

Datum der letzten Änderung

Einfache Anweisung:

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

Die heutige Nummer im richtigen Format

Wenn wir das Datum nicht im Standard für dieses Softwarekonfigurationsformular anzeigen müssen, sondern in dem, was wir benötigen (z. B. "Dienstag, 30. Mai 2000"), können wir folgende Konstruktion verwenden: Den Wochentag abrufen

  <! - # 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 -> 

Jahr bekommen

  <! - # 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" ->

Die Parameterformate für config timefmt müssen für jede Webserverkonfiguration separat betrachtet werden. Das angegebene Beispiel ist FreeBSD, Apache. Weitere Informationen finden Sie unter man timefmt.
Dieser Entwurf wird auf der Website des Online-Shops Levingston.Ru verwendet

Änderungsdatum der externen Datei

Oft auf Computer-Websites legen Sie die Preisliste in MS Excel oder Word-Format und jedes Mal, wenn sie das Datum ihrer Herstellung vorschreiben. Bei SSI geschieht dies grob 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.

Kämpfen mit <noframes>

In der Regel 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 Informationen häufig geändert werden, und der Webmaster ist faul, Änderungen an zwei Stellen jedes Mal vorzunehmen. Mit Hilfe von SSI wird das Problem ein für allemal gelöst: Eine Direktive wird in den Container <noframes> </ noframes> eingefügt und fügt die gleiche Datei ein, in der die Änderungen vorgenommen werden, oder einfach eine Navigationsleiste.

Bekämpfen Sie direkte 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 (Nicht-Root-) Dokument von einer anderen Website aus verlinken, wird der Benutzer auf eine Seite ohne Design- oder Navigationselemente geführt, die normalerweise in einem separaten Navigationsrahmen platziert sind. Mit Hilfe eines einfachen SSI-Designs kann dieses Problem gelöst werden. Dazu muss analysiert werden, woher der Benutzer kommt (Variable HTTP_REFERER) Wenn er nicht von unserem Server kommt, sondern von außen, erstellen Sie eine Rahmenstruktur und ersetzen das vom Benutzer angeforderte Dokument als sinnvollen Rahmen.

Im Beispiel unten ist die Datei content.html das Dokument, zu dem eine direkte Verbindung besteht (z. B. von einer Suchmaschine). Frame.html ist die Datei, in der die Rahmenstruktur erstellt wird. Der Wert von done wird in QUERY_STRING ersetzt, um eine unendliche Verschachtelung von Rahmenstrukturen zu vermeiden.

Datei "Content.html"

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

 ...
 </ body>
 </ html> 

Frame.html-Datei

  <! - # 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 -> 

Dieses Design wird auf der Website des Online-Shops Bolero verwendet

Druckversionsseite

Oft gibt es eine angewandte Aufgabe - ein schönes mehrspaltiges Design mit oberen und unteren Kappen, eine Wolke von Bannern, aber beim Drucken ist all das nicht nötig - zusätzliches Papier, unnötige Informationen ... Deshalb möchte ich eine einfache alternative Seite zum Drucken 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. Verwenden Sie die Variable QUERY_STRING, um zwischen diesen Optionen zu wechseln. Im Folgenden sind die prinzipiellen Strukturen für die Seite selbst (file.html) und für die oberen und unteren Header (top.html und bottom.html) aufgeführt.

Die Struktur der Seite selbst (file.html):

  <! - # include virtual = "top.html? $ QUERY_STRING" ->
 Hier ist der Text des Dokuments
 <! - # include virtuell = "bottom.html? $ QUERY_STRING" -> 

Struktur top.html und bottom.html

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

Der Link auf jeder Seite sollte ähnlich sein

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

Dieses Design wird auf der Website des Allrussischen Webmasters Club 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, dass im Navigationsmenü für diese Abschnitte eine Verknüpfung zu dem Bereich, in dem sich der Benutzer gerade befindet, verschwindet (oder nicht hervorgehoben wird, in einer anderen Farbe hervorgehoben wird, 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 Werke </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 -> 

Dieser Entwurf wird von der Web 2000-Website verwendet.

Kontextabhängige Textausgabe in Abhängigkeit von den Bedingungen

Angenommen, wir haben die Aufgabe, das Erscheinungsbild der ersten Seite der Site zu ändern, abhängig davon, woher der Benutzer kam. Um diese Aufgabe zu erfüllen, wird folgende Konstruktion verwendet:

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

d.h. Vergleiche die Variable HTTP_REFERER

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

Jeder weiß, dass Browser verschiedener Hersteller und Versionen das gleiche HTML-Markup eines Dokuments auf verschiedene Arten anzeigen, von speziellen Tags und Attributen bis hin zu verschiedenen JavaScript-Versionen. Um die Website für eine Browserversion und andere normal aussehen zu lassen oder um JavaScript-Fehler mit SSI zu vermeiden, können Sie Versionen oder Browser überprüfen und verschiedene Versionen von HTML-Markup anzeigen. 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 4 oder 5 ist, zeigen Sie die Option an
 Design mit zum Beispiel DHTML
 <! - # sonst ->
 Drucken Sie hier ein einfaches Design.
 <! - # endif ->

Ein ähnlicher Entwurf wurde verwendet, um die Rahmenstruktur aufzubauen und das interne Menü (für Netscape - für DHTML, für MSIE - für ActiveX) auf der OM- Website anzuzeigen

Der Kampf gegen das Design der Ergebnisse der Skripte

Das größte Problem mit Skripten besteht darin, dass bei einer großen Menge an Software das Ändern ihres Designs eine Neukonfiguration erfordert. Es ist gut, wenn die Software korrekt ausgeführt wird und das Ändern der Anzeigemuster betrifft nicht die Mathematik selbst, jedoch gibt es in solchen Fällen Probleme. Auf einer Suchseite wäre es zum Beispiel gut, Banner und Werbenetzwerke auszuführen, aber SSI-Anweisungen werden nicht in .cgi-Dateien verarbeitet. Sie können solche Probleme mit SSI wie folgt lösen: Verwenden Sie kein Skript, um Anzeigevorlagen zu bearbeiten, sondern ein Skript von einem HTML-Dokument über SSI (leider können Sie nur mit den Skripten arbeiten, die die GET-Methode verwenden - die CONTENT_LENGTH-Variable ist in SSI nicht verfügbar) Wie es gemacht wird Es gibt ein HTML-Dokument, das in einem allgemeinen Design-Stil markiert ist. Die Richtlinie wird darin eingefügt.

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

Im ersten Schritt, während QUERY_STRING leer ist, wird der erste Schritt des Skripts aufgerufen. In den folgenden Schritten des Skripts werden die erforderlichen Parameter übergeben. Im Skript selbst sind drei Zeilen wichtig:

  ...
 # Ermitteln Sie die Adresse, an die Daten gesendet werden sollen
 $ query = $ ENV {QUERY_STRING};
 # Bestimmen 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 wird im Bereich "Voting" für den Online-Supermarkt Levingston.Ru verwendet

Was kann mit Cookie und SSI getan werden?

Oft gefunden Konstruktion auf JavaScript, die "Hallo, Ivan Ivanovich!" wenn Sie eine Website-Seite eingeben. 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 eine zufällige Variable in die URL des Anzeigeskripts aufzunehmen - Schutz gegen Zwischenspeicherung.

  • Sie können eine ganze Seite mit einem Skript erstellen, vom ersten bis zum letzten Zeichen.
  • Kann getan werden, wie beratene Hilfeseiten des Bannersystems - schließen Sie durch SSI-Index ein, ein zufälliges Banner generierend
  • Zeichnen Sie einen Teil eines Dokuments dynamisch mit dem Bannercode von JavaScriper auf

Und du kannst das immer noch so machen:

  <! - # 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, die Anzahl der Sekunden ab 1970 wird als Zufallsvariable angezeigt. Die Zeit wird nicht verschwendet und der Speicher zum Starten eines Skript-Generators, Java-Script (wie es jetzt bei einigen Benutzern in Mode ist) kann ausgeschaltet werden. Meiner Meinung nach ist es ziemlich rosig Lächeln glücklich
All dies wird von unserem Administrator auf www.j2.ru getestet und angewendet

Eine Display-Vorlage - anderer Inhalt

Gesendet von Evgeny Bespalchikov (KADIS)

Oft werden Vorlagen auf diese Weise verwendet: <> Es gibt nur eine Datei, die die Struktur der Seite beschreibt, und der Hauptinhalt ist in der Direktive enthalten

  <! - # include virtual = "$ QUERY_STRING.html" -> 
Links werden jeweils sein:
  href = "www.your_domain.ru/index.html?page1"
 href = "www.your_domain.ru/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 -> 

where default.html ist die root-Indexseite (Inhaltsverzeichnis) und nur ein Stub.