Suche:
Virthos-Onlinedokumentation > >   

Seiteninhalte zwischenspeichern

Verwendet man in einem Template mehrere vtSelect- oder vtLoop-Anweisungen, kann dies die Geschwindigkeit, mit der die Seite aufbereitet wird, deutlich herabsetzen. Um dem entgegenzuwirken, stellt Virthos Master einen Mechanismus bereit, mit dem sich fertig aufbereitete Listen oder sonstige Seitenbestandteile auf der Festplatte zwischenspeichern ("cachen") lassen.

Die Vorgehensweise, um diesen Mechanismus einzusetzen, soll anhand eines einfachen Beispiels beschrieben werden. Nehmen wir an, Sie hätten ein Template namens newslist.html, das folgendermaßen aussieht:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Newsliste</title>
    ...
</head>
<body>

    <div id="header"> ... </div>

    <div id="content">
        <!--{{vtSelect:-origin="//News", -type="news",
                -sortfield="Datum",-sortorder="descending"}}-->
        <!--{{vtLoop:-size="30"}}-->
            <h2>{{Headline}}</h2>
            <p>{{Datum}} &mdash; {{Intro}} <a href="{{vtLink}}">mehr</a></p>
        <!--{{vtEndLoop}}-->
        <!--{{vtEndSelect}}-->
    </div>

    <div id="footer"> ... </div>

</body>
</html>

Nehmen wir ferner an, Sie haben in Virthos eine Seite auf Basis dieses Templates angelegt, und diese Seite hat die Nummer 123. Da die Website hohe Besucherzahlen aufweist, aber nur gelegentlich News hinzukommen, ist es sinnvoll, den vtSelect-Block in eine Cachedatei auszulagern, die lediglich einmal am Tag aktualisiert wird. Gehen Sie dazu folgendermaßen vor:

1. Erstellen Sie ein Template für den vtSelect-Block.

Kopieren Sie den gesamten Block von <!--{{vtSelect:... bis {{vtEndSelect}}--> in ein eigenes Template namens newsblock.html. Legen Sie dieses nicht direkt in das Verzeichnis, in dem newslist.html liegt, sondern in ein Unterverzeichnis namens blocks. Dadurch bleibt die Übersichtlichkeit gewahrt.

2. Legen Sie das Cache-Verzeichnis an.

Sie brauchen ein Verzeichnis, in dem die Cache-Dateien erzeugt werden. Legen Sie dazu (falls noch nicht vorhanden) im data-Verzeichnis ein Unterverzeichnis namens cache an. Die Zugriffsrechte müssen so gesetzt sein wie bei den übrigen Unterverzeichnissen, die sich im data-Verzeichnis befinden. Der Webserver muss in dieses Verzeichnis schreiben und daraus lesen können.

3. Erzeugen Sie die Cache-Datei.

Um die Cache-Datei zu erzeugen, müssen Sie die virthos.php-Datei in Ihrem Webbrowser mit speziellen URL-Parametern aufrufen:

http://.../virthos.php?-pg=123&-met=blocks/newsblock.html&-out=newsblock.html

Der -pg-Parameter enthält die Nummer der Seite, ín deren Kontext das Template interpretiert werden soll. Im Normalfall geben Sie hier die Seite an, in die der Cacheblock eingebunden wird. In unserem Beispiel könnten wir die Seitenangabe auch weglassen, weil das Template keine seitenabhängigen Platzhalter oder Anweisungen enthält; aber schaden kann diese Angabe nicht.

Der -met-Parameter enthält den Pfad zur Cache-Templatedatei, ausgehend von dem Verzeichnis, in dem die gewöhnlichen Templates liegen.

Der -out-Parameter ist das eigentlich Besondere an dem Aufruf. Dieser Parameter steht nur in Virthos Master zur Verfügung und weist Virthos an, die aufbereiteten Inhalte nicht an den Webbrowser zu liefern, sondern sie in eine Datei zu schreiben, in diesem Fall in die Datei newsblock.html.

Wenn Sie diese URL zum ersten Mal aufrufen, erzeugt Virthos im Cache-Verzeichnis automatisch ein Unterverzeichnis namens blocks und darin die Datei newsblock.html.

4. Binden Sie die Cache-Datei ins Seitentemplate ein.

Damit Sie die Vorteile der Cache-Datei auch wirklich nutzen, müssen Sie nun noch das ursprüngliche Template anpassen. Entfernen Sie dazu den vtSelect-Block und fügen Sie an seiner Stelle eine vtInclude-Anweisung ein:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Newsliste</title>
    ...
</head>
<body>

    <div id="header"> ... </div>

    <div id="content">
        <!--{{vtInclude:/virthos/data/blocks/newsblock.html}}
    </div>

    <div id="footer"> ... </div>

</body>
</html>

Die vtInclude-Anweisung muss den absoluten Pfad der Cache-Datei enthalten, also ausgehend vom Wurzelverzeichnis des Webauftritts. Das obige Beispiel geht davon aus, dass Virthos in einem Unterverzeichnis namens virthos installiert ist. Dies müssen Sie gegebenenfalls an Ihre Gegebenheiten anpassen.

5. Optimieren Sie das Cache-Template

Wenn Sie der Anleitung bis hierher gefolgt sind, haben Sie bereits ein funktionierendes Cache-System vorliegen. Sie können sich davon überzeugen, indem Sie die Seite mit der Newsliste im Webbrowser aufrufen. Es gibt allerdings noch ein kleines Problem, das sich zeigt, wenn Sie die Cache-Datei cache/blocks/newsblock.html in einem Texteditor öffnen. Sie werden nämlich feststellen, dass die Hyperlinks, die sich darin befinden, sessionbezogene Parameter enthalten (-ses und -cod). Wann immer jemand auf einen dieser Links klickt, versucht Virthos die Session wiederherzustellen, innerhalb derer die Cache-Datei erzeugt wurde. Mit anderen Worten: Der Besucher verlässt "seine" Session, und verliert damit alle sessionbezogenen Informationen, die in Virthos bis dahin gespeichert worden sind. Ein Redakteur zum Beispiel, der sich bei Virthos angemeldet hat, würde beim Klick auf einen solchen Link seinen Redakteursstatus verlieren und könnte im Virthos-Manager nicht mehr richtig weiterarbeiten.

Damit die Hyperlinks in jeder Session die richtigen Informationen weitertransportieren, müssen sie in jeder Session anders aussehen. Mit anderen Worten: Sie dürfen nicht statisch in den Cache-Block eingebunden werden, sondern müssen beim Aufruf der Seite dynamisch erzeugt werden. Da der Cache-Block wie eine gewöhnliche Include-Datei eingebunden wird, darf er auch VirthosTalk-Platzhalter enthalten, die Frage ist nur, wie wir verhindern, dass diese Platzhalter beim Erzeugen der Cache-Datei bereits durch statischen Code ersetzt werden.

Virthos Master stellt zu diesem Zweck einen speziellen Platzhalter namens "vtOut" zur Verfügung. In unserem Beispiel könnten wir ihn folgendermaßen einsetzen:

<p>{{Datum}} &mdash; {{Intro}} <a href="{{vtOut:vtLink}}">mehr</a></p>

Wenn Virthos beim Erzeugen der Cache-Datei auf einen vtOut-Platzhalter stößt, bindet es alles, was hinter dem Doppelpunkt folgt, als Platzhalter in die Cache-Datei ein. Das Ergebnis könnte zum Beispiel so aussehen:

<p>12.04.2008 &mdash; Dies ist ein Introtext. <a href="{{vtLink}}">mehr</a></p>

Während also die Platzhalter {{Datum}} und {{Uhrzeit}} durch statische Inhalte ersetzt wurden, bleibt an der Stelle, an der {{vtOut:...}} stand, ein vtLink-Platzhalter stehen. Und damit werden die Hyperlinks tatsächlich erst erzeugt, wenn jemand die Newsliste aufruft, so dass dann alle Sessioninformationen erhalten bleiben.

Unser Problem ist damit aber noch nicht ganz gelöst, denn {{vtLink}} verweist, wenn nichts anderes angegeben ist, immer auf die Seite, die den aktuellen Kontext bildet. Innerhalb des vtLoop-Blocks, so wie er im Template ursprünglich vorlag, wurde der Kontext richtig gesetzt, aber dieser Block existiert ja in der Cache-Datei nicht mehr. Hier würde {{vtLink}} bei allen News in der Liste auf dieselbe Seite verweisen, nämlich die Newsliste selbst.

Die Lösung besteht darin, das Verweisziel im vtLink-Platzhalter explizit anzugeben:

<p>{{Datum}} &mdash; {{Intro}} <a href="{{vtOut:vtLink: {vtID} }}">mehr</a></p>

Das Ergebnis könnte dann in der Cache-Datei so aussehen:

<p>12.04.2008 &mdash; Dies ist ein Introtext. <a href="{{vtLink: 245 }}">mehr</a></p>

Damit haben wir unser Ziel erreicht: Die Cache-Datei enthält keine sessionbezogenen Informationen mehr, und die Hyperlinks werden bei jedem Seitenabruf korrekt gebildet.

6. Automatisieren Sie die Cache-Erzeugung

Wenn die Redakteure öfter neue Einträge für die Newsliste erstellen, ist das manuelle Erzeugen der Cache-Datei auf Dauer etwas lästig, und es besteht die Gefahr, dass dies vergessen wird. Daher empfiehlt es sich, diesen Vorgang zu automatisieren. Eine einfache Lösung besteht darin, einen Onlinedienst wie cronjob.de zu verwenden. Dort lassen sich URLs hinterlegen, die in bestimmten Zeitabständen automatisch aufgerufen werden. Wenn Sie dort die URL aus Schritt 3 eintragen und beispielsweise jede Nacht um 3:00 Uhr aufrufen lassen, haben Sie mit wenig Aufwand eine automatische tägliche Cache-Aktualisierung verwirklicht.

Eine Alternative, die allerdings voraussetzt, dass Sie auf dem Webserver über erweiterte Zugriffsrechte verfügen, besteht darin, ein Shell-Skript für die Cache-Erzeugung einzurichten und dieses in die Cron-Tabelle des Systems einzutragen. Sie können dabei mit den Unix-Befehlen wget oder curl arbeiten und die URL genauso angeben, wie in Schritt 3 beschrieben. Effizienter ist es allerdings, das Virthos-PHP-Skript direkt über die Kommandozeile anzusprechen. Der Befehl dazu könnte beispielsweise so aussehen:

/usr/bin/php virthos.php -pg=123 -met=blocks/newsblock.html -out=newsblock.html

Falls sich der PHP-Interpreter nicht im Verzeichnis /usr/bin/ befindet, müssten Sie die Pfadangabe entsprechend anpassen. Und wenn sich das Shell-Skript, das diesen Befehl enthält, nicht im gleichen Verzeichnis befindet wie die virthos.php-Datei, müssten Sie auch deren Pfad mit angeben.

< Eigenen PHP-Code einbinden 11.09.2008, 08:08 Uhr Nicht-HTML-Dokumente erzeugen >