Die Elemente der Templatesprache von Stacey
Stacey verarbeitet jedes Template zunächst als reinen Text, erst danach wird es als HTML verarbeitet. Anweisungen wie <?php ?>
werden nicht verarbeitet.
Sprachkonstrukte
Innerhalb der Templates von Stacey stehen die folgenden drei Sprachkontrukte zur Verfügung:
get
-Blöckeforeach
-Sschleifen- boolische
if
Abfragen.
- get
-
get "/url" do # do stuff end
- foreach
-
foreach $collection do # do stuff endforeach
- if
-
if @variable do # do stuff endif
- if not
-
if !@variable do # do stuff endif
Variablenkontext
Wenn man sich innerhalb einer foreeach
-Schleife befindet, verschiebt sich der Kontext auf das aktuelle Objekt, das gerade durch die Schleife referenziert wird.
Wenn man den Kontext einer bestimmten Seite temporär verschieben will, muss man einen get
-Block einfügen.
get "/projects/project-1" do <p>@page_name</p> end
Damit wird der Kontext von der aktuellen, gerade angezeigten Seite verschoben zur Seite /projects/project-1
. Das bedeutet, $children wird mit den Unterelementen der Seite /projects/project-1
gefüllt, @page_name
ist 'Projects' usw.
Wenn man also nur die Unterelemente des Verzeichnisses /projects auflisten (die selbst wieder keine Unterelemente beinhalten), kann man das folgende Partial nutzen:
get "/projects" do foreach $children do if !$children do <p><a href="@url">@page_name</a></p> endif endforeach end
foreach-Schleifen begrenzen
foreach-Schleifen kann man begrenzen in dem man die Konstruktion
$collection[start:limit]
nutzt. Das Array wird nun auf die mit start
und limit
vorgegebenen Werte begrenzt.
Die Werte start
und limit
sind jeweils optional. Man kann auch
$collection[:2]
angeben, um nur die ersten beiden Elemente oder
$collection[2:]
um alle Elemente außer den ersten beiden auszuwählen. Das folgende Partial gibt nur das dritte und vierte Element der Kollektion $children aus:
<ol id="navigation"> foreach $children[2:2] do <li><a href="@url">@page_name</a></li> endforeach </ol>
foreach-Schleifen verschachteln
Um die unterschiedlichen Ebenen eines Objektes zu durchlaufen können foreach-Schleifen ineinander verschachtelt werden, z.B.
<ol id="navigation"> foreach $root do <li><a href="@url">@page_name</a> if $children do <ol> foreach $children do <li><a href="@url">@page_name</a> endforeach </ol> endif </li> endforeach </ol>
Allerdings wäre in diesem Fall wohl ein rekursives Partial die elegantere Lösung.