Viele sind jetzt bestimmt erschrocken und denken: Muss ich jetzt etwa noch eine Programmiersprache lernen, hab ich nicht schon genug Last mit HTML, CSS, PHP etc. ?
Die Antwort lautet: Ja. Typoscript ist die Steuersprache in Typo3 und gehört unmittelbar dazu. Dafür brauch man kein PHP zu können, um mit Typo3 arbeiten zu können.
Aber ich kann Euch beruhigen - Typoscript (im Folgenden nur TS genannt) ist eine sehr einfache Sprache mit einem leicht verständlichen Syntax, und ist mit Scriptsprachen wie CSS zu vergleichen. Es wird Euch also nicht sehr schwer fallen, Typoscript zu erlernen.
Kommen wir also zum Syntax von TS
Wir haben es in TS mit Objekten zu tun, die Eigenschaften haben und zugewiesen bekommen. Daher lautet der Syntax zu einer Wertzuweisung:
Objekt = Objekttyp
oder
Objekt.Eigenschaft = Wert
Der Punkt ist also das Symbol für ein Kindobjekt.
Wir wollen uns das einmal an einem (nicht anwendbaren
) Beispiel verdeutlichen, einem Baum
Code:
01 Baum = Waldpflanze
02 Baum.wrap = <ganz viele Bäume> | <ganz viele Bäume>
03 Baum.Stammumfang = 6
04 Baum.höhe = 24
05 Baum.Kind = ÄSTE
06 Baum.Kind {
07 10 = Ast
08 10.Länge = 14
09 10.Baumansatz = 4
10 10.Zweige = 36
11
12 20 = Ast
13 20.Länge = 9
14 20.Baumansatz = 7
15 20.Zweige = 25
16 }
Wir haben mit diesen 16 Zeilen einen ganzen Wald erzeugt, nur wie ?
In Zeile 1 definieren wir ein Objekt mit dem Namen Baum und weisen ihm den Typ "Waldpflanze" zu.
In Zeile 2 "packen wir den Baum ein" (wrap=einwickeln) und setzen links und rechts von ihm ganz viel Bäume hin. Beim Einpacken brauchen wir einen Platzhalter für unseren Baum, damit Typo3 weiss, wo er hinsoll - dafür steht die Pipe (|).
Zeile 3 und 4 definieren Eigenschaften unseres Baumes, hier gilt die (Web-)Standardmasseinheit Meter (
)
Unser Baum hat aber Unterobjekte, diese definieren wir in Zeile 5. Der Objekttyp ÄSTE ist eine Ansammlung von Objekten, unser Baum hat ja auch ganz viele davon.
In Zeile 6 machen wir uns einer bequemen Schreibweise zu Nutze - statt immer wieder Baum.Kind... schreiben zu müssen, fassen wir die folgenden Zeilen zusammen mit der Verschachtelung {} - Doch Vorsicht, jede geöffnete Klammer muss auch wieder geschlossen werden, sonst verläuft sich Typo3.
Da wir eine Ansammlung von Unterobjekten haben, nehmen wir einfache Bezeichner (10,20,30,...). Dies hat den Vorteil, das Typo3 sie in aufsteigender Reihenfolge abarbeitet. Wir wählen auch absichtlich 10er-Schritte, so das wir bei Bedarf auch Elemente dazwischenschieben können (5,15,18,etc). Diese müssen nicht in der richtigen Reihenfolge dastehen, Typo3 erledigt das anhand der Zahlen automatisch.
Jedes Kindelement bekommt wieder einen Objekttyp und Eigenschaften zugewiesen.
Damit haben wir auch schon das Wesentliche gelernt, war doch nicht schwer, oder ?
Wir haben noch einige Syntax-Zeichen, die ich hier erläutern möchte:
Code:
#dies ist ein Kommentar
//auch ein Kommentar
/* dies ist
ein
mehrzeiliger
lommentar
*/
Bei Kommentaren ist zu beachten, das es keine "Inline"-Kommentare gibt, also Kommentare müssen in eine extra Zeile.
Die Kommentare entsprechen übrigens PHP und Perl
Das Zeichen > löscht eine Objektdefinition
Das Zeichen < kopiert ein Objekt. Wir könnten also unseren mühsam erstellten Baum in einer Zeile vervielfachen:
Hier gibt es noch das relative kopieren. Unsere Äaste sehen ja manchmal fast gleich aus, wir könnten also nach zeile 15 folgendes einschieben:
Code:
30 < .20
40 < .20
40.Länge = 14
wir haben also inst Objekt 30 das Objekt 20 kopiert, da wir innerhalb der Klammern sind ist das dann .20
Also eigentlich nur eine Schreibabkürzung statt
Es gibt noch die Möglichkeit, ein Objekt zu referenzieren mit
Wertzuweisungen dürfen keinen Zeilenumbruch enthalten, müssen also in einer Zeile sein.
Wenns trotzdem mehr wird, geht das mit (..)
Code:
Baum.Inschrift = Ich bin der schönste Baum im ganzen Wald
Baum.Inschrift (
Diese Inschrift
kann viel
länger sein
und sich über
mehrere Zeilen
erstrecken !
)
Dann gibt es den Zugriff auf Variablen, die in Konstanten definiert sind:
Code:
Baum.Inschrift = {$normale_inschrift}
Das setzt vorraus, das in Constants diese Variable definiert ist, z.B.
Code:
normale_inschrift = Ich bin ein ganz normaler Baum
Und für einfache Fallunterscheidung gibt es Conditions (Bedingungen):
Code:
[bedingung1]
...
[bedingung2]
...
[global]
Das entspricht dem Ausdruck:
Wenn Bedingung 1:
...
Oder wenn Bedingung2:
...
Ende
Somit haben wir alles an der Hand, was wir für Typoscript brauchen und können uns an die Praxis machen.