Syntax (Grundlagen)

Grundlegend besteht TypoScript aus folgenden Elementen:

# Kommentar 1
/ Kommentar 2
// Kommentar 3

Einzeileger Kommentar.

/*
  Kommentar
  Block
*/

Block Kommentar.
Achtung: Funktioniert nicht in den runden Klammern, dort wird es als Teil des Wertes interpretiert.

Objekname = Objekttyp

Dem Objektnamen wird ein Objekttyp zugeordnet. Z.B. page = PAGE

Objektname.EigenschaftA = Wert

Ein Objekt kann verschiedene Eigenschaften habe. Diese Eigenschaften werden durch einen Punkt getrennt.
Dieser Eigenschaft wird dann über das "=" ein Wert zugewiesen.

Objektname.EgenschaftA.EigenschaftB = Wert

Eigenschaften können ebenfalls Eigenschaften haben, denen dann wiederum durch das "=" ein Wert zugewiesen wird.

Objektname{
  EgenschaftA = Wert
  EigenschaftA.EigenschaftB = Wert
}

Eine Schachtelung ist immer an einem Punkt möglich. Diese wird mit geschweiften Klammern umschlossen. Auf der Seite Template wird dies so veranschulicht.
Achtung: Die öffnende Klammer muss in der gleichen Zeile stehen, wie der Pfad den sie einleitet!

 

 

  • TypoScript unterscheidet zwischen Groß- und Kleinschreibung.
  • TypoScript ist zeilenorientiert. Eine Anweisung Statement kann also nicht über zwei Zeilen geschrieben werden. Dies kann mit dem Umschließen von runden Klammern umgangen werden (). Die öffnende Klammer muss sich in der Zeile befinden, in der die Anweisung begonnen hat.

 

 


Wiederverwendbarkeit - Konstanten

Um die Pflege des Skripts zu vereinfachen, z.B. bei häufig identischen verwendeten Wertzuweisungen, gibt es die Möglichkeit, diese durch Konstanten zu ersetzen.

In dem nachfolgenden Beispiel werden drei Div Bereiche ausgegeben. Zwei von diesen Bereichen sind identisch:

page = PAGEpage{  
  10 = TEXT
  10.value = <div style="background-color:silver">Dies ist der Hintergrund mit der Farbe: silver</div>    
  20 = TEXT    
  20.value = <div style="background-color:yellow">Dies ist der Hintergrund mit der Farbe: yellow</div>    
  30 = TEXT    
  30.value = <div style="background-color:silver">Dies ist der Hintergrund mit der Farbe: silver</div>
}

Wir wechseln in den "Konstanten" Bereich, der sich im Templatebereich direkt oberhalb des "Setup" Bereichs befindet. Dort können wir für die Farbe eine Konstante definieren. 

Z.B.:
bg = silver
oder
projekt.bg =silver

Wie zu sehen, ist eine hirarische Angabe von Konstanten möglich. Diese muss aber dann auch bei der Verwendung vollständig angegeben werden.

Diese definierte Konstante können wir dann im Setup Bereich, durch die Verwendung von geschweiften Klammern und dem Dollar Zeichen, einbinden.
{$bg} oder {$projekt.bg}

page = PAGE
page{
  10 = TEXT
  10.value = <div style="background-color:{$bg}">Dies ist der Hintergrund mit der Farbe: {$bg} </div>

   20 = TEXT
   20.value = <div style="background-color:yellow">Dies ist der Hintergrund mit der Farbe: yellow</div>

   30 = TEXT
   30.value = <div style="background-color: {$bg} ">Dies ist der Hintergrund mit der Farbe: {$bg} </div>
}

Wenn nun die Farbe geändert werden muss, kann es an einer Stelle, und zwar im Konstanten Bereich erfolgen.

 


Wiederverwendbarkeit - andere Objekte

Objekte können ebenfalls an einer anderen Stelle definiert werden, um sich bei einer Mehrfachverwendung Arbeit und Fehler zu ersparen.

Dazu nehmen wir das Beispiel aus dem vorherigen Thema auf, und lagern das Textobjekt mit dem DIV einfach aus, und fügen dann einfach nur einen Verweis an den Stellen ein, in denen es auftaucht.

Des weiteren ist es möglich dieses Objekt zu überschreiben bzw. zu erweitern. Dies habe ich mit Hilfe eines Wrap's demonstriert.

 

lib.meinObj = TEXT
lib.meinObj.value = <div style="background-color:{$bg}">Dies ist der Hintergrund mit der Farbe: {$bg}</div>


page = PAGE
page{
   10 < lib.meinObj

   20 = TEXT
   20.value = <div style="background-color:yellow">Dies ist der Hintergrund mit der Farbe: yellow</div>

   30 < lib.meinObj
   30.wrap = <strong> | </strong>

}

Es ist möglich, anstatt eines "<" Zeichens ein "=<" einzusetzen. Dies scheint auf den ersten Blick die gleiche Wirkung zu haben, kann aber eine böse Falle werden.

Das "<" Zeichen bindet das Objekt als Kopie ein, das "=<" Zeichen bindet das Objekt als Referenz ein.

Eine Kopie kann erweitert und verändert werden, was sich auf ein Späteres erneutes Einbinden nicht auswirkt. Wird jedoch eine Referenz verändert, wirkt sich dies ebenso auf spätere Verwendungen des Objekts aus.

Temporäre Objekte können erzeugt werden, indem man anstatt "lib" das Wort "temp" voranstellt. Diese Objekte können nicht referenziert werden, sondern nur kopiert ("<").

 


Bedingungen in TypoScript

In TypoScript kann auch mit Bedingungen gearbeitet werden. Wenn z.B. etwas nur im IE angezeigt werden soll.

Eine Bedingung wird in eckige Klammern geschrieben [].

In unserem Beispiel wird bei Verwendung des IE ein entsprechender Hinweis ausgegeben. Die Bedingung beginnt mit der Entscheidung, ob es sich um einen IE handelt [browser = msie]. Danach kommt die entsprechende Ausgabe, und zum Abschluss die schließende Anweisung [global], damit der weitere Code auch von den anderen Browsern wieder dargestellt wird.

temp.meinObj = TEXT
temp.meinObj.value = <div style="background-color:{$bg}">Dies ist der Hintergrund mit der Farbe: {$bg}</div>

page = PAGE
page{
   10 < temp.meinObj

   20 = TEXT
   20.value = <div style="background-color:yellow">Dies ist der Hintergrund mit der Farbe: yellow</div>

   30 < temp.meinObj
   30.wrap = <strong> | </strong>
}

[browser = msie]
page.40 = TEXT
page.40.value = Ich bin ein Internet Explorer von Microsoft
[global]

Ebenso kann auch eine else Verzweigung verwendet werden [else].

temp.meinObj = TEXT
temp.meinObj.value = <div style="background-color:{$bg}">Dies ist der Hintergrund mit der Farbe: {$bg}</div>

page = PAGE
page{
   10 < temp.meinObj

   20 = TEXT
   20.value = <div style="background-color:yellow">Dies ist der Hintergrund mit der Farbe: yellow</div>

   30 < temp.meinObj
   30.wrap = <strong> | </strong>
}

[browser = msie]
page.40 = TEXT
page.40.value = Ich bin ein Internet Explorer von Microsoft
[else]
page.40 = TEXT
page.40.value = Ich bin kein Internet Explorer von Microsoft
[global]

Des Weiteren lassen sich Bedingungen auch verknüpfen. Wenn ihr die Bedingungen nicht aus dem Kopf wisst, könnt ihr unter www.typo3.org < Documentation < References < TSref < Conditions " nachschlagen. Wir verwenden für dieses Beispile "globalVar".
Wenn Verknüpfungen hintereinander geschrieben werden, so handelt es sich defaultmäßig um eine "Oder" Verknüpfung. Möchten wir eine "Und" Verknüpfung, müssen wir "&&" dazwischen einfügen.

temp.meinObj = TEXT
temp.meinObj.value = <div style="background-color:{$bg}">Dies ist der Hintergrund mit der Farbe: {$bg}</div>

page = PAGE
page{
   10 < temp.meinObj

   20 = TEXT
   20.value = <div style="background-color:yellow">Dies ist der Hintergrund mit der Farbe: yellow</div>

   30 < temp.meinObj
   30.wrap = <strong> | </strong>
}

[browser = msie] && [globalVar = L=1]
page.40 = TEXT
page.40.value = Ich bin ein Internet Explorer von Microsoft und die Globale Variable ist &L
[else]
page.40 = TEXT
page.40.value = Ich bin kein Internet Explorer von Microsoft
[global]

Um jetzt im IE die Ausgabe "Ich bin ein Internet Explorer ..." zu erhalten, müsst ihr der Url die ihr gerade aufgerufen habt noch ein L=1 manuel hinzufügen (..*.php?id=12&L=1)

Achtung: Bedingungen dürfen nicht in geschweiften Klammern stehen!