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
ifAbfragen.
- 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.