Während es den wenigsten halbwegs sachkundigen Menschen Probleme bereitet, Textpattern (TXP) zum Laufen zu bringen, ist die Anpassung von Details mitunter schon schwieriger, insbesondere wenn der systemeigene Funktionsumfang für die individuellen Wünsche gerade nichts bereit hält. Zwei Lösungen, nach denen oft gefragt wird, wollen wir einmal näher erläutern:
Die meisten Weblogs arbeiten mit unterschiedlichen Artikelstrukturen. Kurze, notizartige Meldungen zum einen, zum anderen längere Beiträge (wie dieser), dessen Inhalt in einem Exzerpt kurz umrissen wird. Auf der Überblicksseite ist eine unterschiedliche Darstellung sinnvoll: von längeren Artikeln erscheint lediglich das Exzerpt, das mit einem »mehr …« zum vollständigen Artikel weist, während kürzere in vollem Umfang auf der Überblicksseite erscheinen. Ein Weg, diese Unterscheidung vorzunehmen, besteht darin, mit unterschiedlichen Bausteinen zu arbeiten, die per »Baustein überschreiben« ausgetauscht werden. Die Methode ist in Kurzform (auf deutsch) hier beim KBBU beschrieben und ausführlicher hier bei Jon Hicks (auf englisch).
Eine einfachere und flexiblere Lösung bietet das Plug-In mdn_if_custom (Links dazu unten). Es offeriert Möglichkeiten, den Inhalt von Custom-Feldern (unter »Erweiterte Einstellungen« bei den Artikelmasken) mittels If-Else-Abfragen auszuwerten. Zunächst der Code des fraglichen Bausteins (bei installiertem Plug-In):
<txp:mdn_if_custom field="1" notempty="1">
<txp:body />
=> alles, was bei Kurzartikeln erscheinen soll
<else />
<txp:excerpt />
=> alles, was beim Exzerpt erscheinen soll
</txp:mdn_if_custom>
<txp:mdn_if_custom field="1" notempty="1"> prüft, ob es im Feld »custom1« irgend einen Eintrag gibt, wenn ja, wird der komplette Artikel angezeigt, else (also, wenn nicht) gibt es das Exzerpt. Weitere unterschiedliche Ausgabemerkmale können ebenfalls an der jeweiligen Stelle eingetragen werden. Alles, was in Zukunft getan werden muss: Kurzartikel bekommen einen Eintrag im Feld »custom1« (egal was, ein beliebiges Zeichen reicht aus) und damit hat es sich.
Das Plug-In bietet darüber hinaus noch weitere Abfrageparameter, sodass sich allein mit Hilfe der Custom-Felder (auch in deren Kombination) im Prinzip unbegrenzte, fein ziselierte Ausgabeunterscheidungen treffen lassen. Das Prinzip der If-Else-Abfrage bleibt dabei immer dasselbe.
Die Ausgabe des Artikeldatums gehört bekanntlich zu den einfachsten Übungen, das TXP-Tag <txp:posted /> liefert es an jeder gewünschten Stelle. Nun lassen sich viele Fälle denken, in denen es wünschenswert ist, zusätzlich auch das Datum der letzten Bearbeitung eines Artikels anzuzeigen. Seltsamerweise gibt es dafür (unseres Wissens) kein TXP-Tag, obschon es als Feld in der Datenbanktabelle eingetragen ist (»LastMod«).
Auch hier hilft zunächst ein Plug-In: ob1-modified (Link ebenfalls unten). Ohne Parameter gibt es das letzte Bearbeitungsdatum allerdings immer aus. Wer das störend findet, grenzt die Anzeige ein, indem es nur ausgegeben wird, wenn es vom Ursprungsdatum abweicht. Ein vollständiges Tag-Beispiel könnte so aussehen:
<txp:ob1_modified output="differs" starttext="Zuletzt bearbeitet " />
Zuständig für die Abweichungsprüfung ist output="differs", starttext liefert den Textstring, der vor dem Datum angezeigt wird. So weit, so gut. Zumindest wir stießen vor das Problem, dass wir sehr häufig noch kleinere Korrekturen in Artikeln vornehmen, auch wenn sie schon veröffentlicht sind. Die Abweichung der beiden Daten ist aus Sicht des Plug-Ins allerdings schon erfüllt, wenn auch nur eine Sekunde dazwischen liegt. Dem ließe sich zwar leicht begegnen, indem das Ursprungsdatum bei jeder Änderung (sichtbar) auf die aktuelle Zeit gesetzt wird, was aber in vielen Fällen nicht wünschenswert ist.
Wir suchten also nach einer Möglichkeit, sozusagen eine »Schamfrist« einzubauen, während der Korrekturen vorgenommen werden können, ohne dass sie gleich penibel aufgeführt werden. Dazu ist es nötig, den PHP-Code des Plug-Ins zu modifizieren. Etwa in Zeile 44 steht die Ansage für die Variable output:
if($output=="differs") {
if($lastMod==$thisarticle["posted"]) return "";
}
Ändern Sie diese einfach wie folgt:
if($output=="differs") {
// Ursprungsdatum abgreifen
$posted = fetch('Posted', 'textpattern', 'ID', $thisarticle['thisid']);
// In UNIX-Timestamp umwandeln
$posted = strtotime($posted);
// $lastMod ist bereits ein UNIX-Timestamp
// Beide Werte subtrahieren
$differ_time = $lastMod - $posted;
// Falls kleiner als 24 Stunden, keine Ausgabe
if ($differ_time < 86400 ) return "";
}
Das Bearbeitungsdatum wird nur noch angezeigt, wenn es mindestens 24 Stunden (86.400 Sekunden) nach dem Ursprungsdatum liegt. Soll die Frist kürzer oder länger bemessen sein, tragen Sie einfach den gewünschten Wert in Sekunden ein.