Auch bei der SQL-WHERE-Klausel in Listing 3 haben wir schon von getText Gebrauch gemacht, denn {date:<format>} liefert das aktuelle Datum im angegebenen Format, wobei U dort für das Format Unix Timestamp [4] steht. Im Klartext bedeutet der Ausdruck also: Liefere alle Datensätze, bei denen der letzte Login größer (also neuer, aktueller) vom aktuellen Zeitpunkt 864.000 Sekunden (= 10 Tage) rückwärts gerechnet ist.
Der kleine Unterschied
| stdWrap Eigenschaft | Wirkung |
field = uid
wrap = userid=| |
Übernimm den Inhalt aus der Spalte uid der letzten Datenbankabfrage und umschließe ihn mit userid=|. |
data = field:uid
wrap = userid=| |
Werte den getText in data aus und umschließe ihn. |
current = userid={field:uid}
current.insertData = 1 |
Lade den Content mit der Zeichenkette aus current und ersetze alle Vorkommen von {...} als getText. |
Die Ausdrücke in dieser Tabelle bewirken scheinbar alle das Gleiche. In dieser einfachen Form ist das tatsächlich so.
Interessant wird es nun, wenn man sich die Unterschiede vor Augen führt. Version 1 und 2 unterscheiden sich nur unwesentlich. Die zweite benutzte getText und ist damit noch einen Tick universeller, kann man damit doch auch in jedem Kontext die aktuelle Seiten-ID, die Informationen aus der Rootline und Ähnliches erfragen. Das dritte Beispiel ist viel kompakter und flexibler. Man kann mehrere getText-Anweisungen in eine Zeile schreiben. Wir werden im nächsten Teil tiefer darauf eingehen.
Fazit und Ausblick
Wir haben mit wenigen Zeilen TypoScript eine Userliste entwickelt, die in PHP verfasst mindestens den doppelten bis dreifachen Umfang eingenommen hätte. Gleichwohl gibt es natürlich Situationen, in denen sich dieses Verhältnis schnell umkehren kann. Die Auswirkungen einer getroffenen Entscheidung vorauszusehen und zu planen kann manchmal nicht ganz einfach sein. Einige der Beschränkungen des CONTENT-Objekts sind offensichtlich. Systemtabellen oder nicht-TYPO3-Tabellen zu befragen, ist unmöglich [5], lange Listen möchte man gern durchblättern können und die propagierte Trennung von Code, Inhalt und Design ist uns auch etwas verloren gegangen.
Die meisten der oben genannten Beschränkungen von CONTENT werden wir im nächsten Teil mit einer von mir entwickelten Extension aufheben. Außerdem werden als Fingerübung weitere stdWrap-Eigenschaften wie Bedingungen und Umwandlungen eingesetzt, wenn wir die Profilseite für einen User dynamisch erzeugen.




