Seite 20 von 101, insgesamt 101 Einträge

Teaser-Startseite in Serendipity

Offenbar war das, was ich gestern als „ganz langweilig, einfach nur Teaser“ abtat, doch nicht so bekannt. Um meine ehemalige Mathelehrerin zu zitieren: „Ich erklär das gerne nochmal!“

Worum geht's?

Ziel ist eine individualisierte Startseite mit Teasern für die letzten X Artikel in einem Serendipity-Blog. Das geht natürlich nicht mit ein bisschen CSS in der user.css, dafür müsst Ihr an die Smarty-Templates, konkret: (mindestens) an die index.tpl. Im Prinzip reicht eine Zeile, um das gewünschte Ergebnis zu erzielen:

{serendipity_fetchPrintEntries full=true fetchDrafts=false noSticky=true limit="0,5"}

Übersetzt heißt das: gib eine Liste vollständiger Einträge aus, und zwar ohne Entwürfe oder permanente Einträge zu berücksichtigen – ab dem aktuellsten 5 Artikel. serendipity_fetchPrintEntries kann noch viel mehr; da wir die Dokumentation gerade umbauen, verlinke ich jetzt mal nicht auf den entsprechenden Abschnitt, aber das hier reicht uns auch fast schon. Würde man das so einbauen, würde die entries.tpl als Template für die Artikelteaser genommen, und das ist ein bisschen viel. Also nutzen wir eine eigene Template-Datei:

{serendipity_fetchPrintEntries full=true fetchDrafts=false noSticky=true limit="0,5" template="teaser.tpl"}

Diese kann man sehr viel simpler halten (es ist ja nur ein Teaser), hier z.B. mein Template. Wie man dort sieht, sind die Teaser Punkte einer Liste und enthalten lediglich einen Link zum Artikel, einen Zeitstempel und eine gekürzte (truncate) Version des von Markup befreiten (strip_tags) Artikeltextes.

Kurzer Einwurf: Warum „von Markup befreit“? Weil es aufgrund der Begrenzung auf eine feste Anzahl Zeichen (zu denen auch HTML-Tags gehören würden) vorkommen kann, dass Tags nicht mehr innerhalb des Teasers geschlossen werden, was uns mit hoher Wahrscheinlichkeit das Layout zerschießen würde. So ist die sicherste Methode, alles HTML zu entfernen und den verbleibenden Text in <p>…</p> zu wickeln.

Wie „verpackt“ man das?

Die Teaserliste soll ja nur auf der Startseite ausgegeben werden, ansonsten wollen wir den „normalen“, an der jeweiligen Stelle vorgesehenen s9y-Inhalt ausgeben. Dafür können wir (auch wieder in der index.tpl) mit der Variablen $view (zumindest meistens) prüfen, was gerade ausgegeben wird:

{if $view == "start" && $staticpage_pagetitle == ''}
    {* Code für die Startseite, also Teaserliste *}
{else}
    {$CONTENT}
{/if}

Auch da verweise ich aus Platzgründen wieder auf das vollständige Template im GitHub-Repository des Themes – da sieht man z.B. auch, wie man sich ganz billig eine eigene 404-Seite ins Blog packen kann. Zudem ist dort mit einer Theme-Option ({$template_option.home_title}) die Überschrift der Liste konfigurierbar gemacht; dafür kann man (wie dort z.B. für die 404-Seite) genausogut Sprachkonstanten verwenden. Und wer ganz faul ist und das Theme nicht mehrsprachig halten möchte oder muss, kann den Kram auch hart in die Templates einkodieren …

Ich hoffe, das war so halbwegs nachvollziehbar? Ansonsten: Bei Fragen fragen!