Schritt 12
SCHRITT 12:
QTip hat mir eine tolle Anregung gegeben, die mehrfach verwendbaren Seiteninhalte doch auszulagern und mit SSI (Server-Side Includes) wieder zu integrieren. Ganz ehrlich habe ich damit noch nie was gemacht, aber es ist eine ganz super Lösung. Wer sich ein wenig einlesen möchte in die SSI, hier ist ein
Tutorial.
Damit das mit den SSI funktioniert, müssen wir dem user-Apache das mitteilen, dass wir das auch machen wollen. Dazu müssen wir zum einen die Options um den Eintrag includes ergänzen und zum anderen eine neue Klausel vereinbaren. Also ran an die
/usr/syno/apache/conf/httpd.conf-user ungefähr Zeile 140 innerhalb der <Directory "/var/services/web">-Direktive:
Rich (BBCode):
Options MultiViews ExecCGI FollowSymLinks Includes
und dann noch ganz ans Ende der Datei die Klausel:
Was hat es damit auf sich. Im HTML werden wir jetzt ähnlich wie bei PHP maskierte Zeile einbauen, wie z. B.
Rich (BBCode):
<!--#include virtual="header.html" -->
die vom Apache SSI erkannt werden und entsprechend bearbeitet werden. In dem Beispiel wird eine URL header.html gesucht und deren Inhalt inkludiert.
Durch die Options-Ergänzung kann der Apache-Web-Server solche Kommentar-SSI-Direktiven erkennen. Damit wir nun nicht wie bei PHP einen neuen Dateityp brauchen (wie bei PHP z. B. .php gibt es für SSI oft .shtml), gibt es den XBitHack. Der besagt, dass wenn die html-Datei Ausführungsrechte hat (z.B. chmod +x index.html; chmod +x page2.html), sie auf SSIs hin untersucht wird.
Das führt jetzt zu folgenden Änderungen in den beiden Dateien index.html und page2.html:
PHP:
<!--#include virtual="header.html" -->
</div> <!-- menu -->
<div id="container">
<div id="container_col">
<div id="counter"></div>
<div id="index"></div>
<div id="feed"></div>
</div> <!-- container_col -->
<div id="content">
<div class="content" style="display:block">
<h3>Titel der sehr lang ist und der noch länger werden könnte</h3>
Das ist Text, der im Content vorkommt. Das ist Text, der im Content vorkommt. Das ist Text, der im Content vorkommt.
</div>
<div class="content" style="display:none">
<h3>Titel-2</h3>
Das ist Text, der im Content vorkommt. Das ist Text, der im Content vorkommt. abc
</div>
<div class="content" style="display:none">
<h3>Titel-3</h3>
Das ist Text, der im Content vorkommt.<img src="cms4ds.jpg" />
</div>
</div> <!-- content -->
<!--#include virtual="footer.html" -->
</div> <!-- basecontainer -->
<script>LoadRSS("http://www.heise.de/newsticker/heise.rdf");make_index();
s=window.location.search; if (s.substr(1,1)=='s') searchAll(s.substr(3)); if (s) showme(s);
</script>
</body></html>
page2.html:
PHP:
<!--#include virtual="header.html" -->
<input id="search" ondblclick="searchAll(this.value)" value="(Suchbegriff)"/>
</div> <!-- menu -->
<div id="container">
<div id="container_col">
<div id="counter"></div>
<div id="index"></div>
</div> <!-- container_col -->
<div id="content">
</div> <!-- content -->
</div> <!-- container -->
<!--#include virtual="footer.html" -->
</div> <!-- basecontainer -->
<script>
LoadHTML("cms4ds.php?where=Rubrik like 'Page2'");
make_index();
s=window.location.search; if (s.substr(1,1)=='s') searchAll(s.substr(3)); if (s) showme(s);
</script>
</body></html>
und zu den beiden zusätzlichen fürs Includieren benötigten Dateien header.html und footer.html:
PHP:
<html><head><title>cms4ds</title>
<link rel="stylesheet" type="text/css" href="cms4ds.css" />
<link rel="shortcut icon" href="cms4ds.ico" />
<link rel="alternate" type="application/rss+xml" title="cms4ds-News-Feed" href="cms4ds_rss.php"/>
<link rel="search" type="application/opensearchdescription+xml"
href="http://syno/cms4ds/search.xml" title="cms4ds" />
<script type="text/javascript" src="cms4ds.js"></script>
<script>var d0,d1,d2,d3;d0=new Date().getTime();</script>
</head><body onload="history()">
<iframe src="blank.html?0" name="histFrame" id="histFrame"></iframe>
<div id="basecontainer">
<div id="top">cms4ds</div>
<div id="menu">
<a href="index.html">Page 1</a>
<a href="page2.html">Page 2</a>
<a href="">Page 3</a>
und footer.html:
PHP:
<div id="footer">(c) 2008 by itari - Impressum: irati itari, KYOTO, No. az/31 (Melnak)</div>
<div id="timer"></div>
Das macht unser cms4ds modularer und die Seiten schlanker. Ich hab keine nennenswert schlechteren Zugriffszeiten messen können, also geht das zusätzlich Parsen bei unseren kleinen Dateien recht fix.
Danke noch einmal an QTip
itari