Documentation // ../../

  1. Overview
  2. RSS/Atom/JSON
  3. Variable Types
    1. :partials
    2. $collections
    3. @variables
  4. Editing Templates
    1. Assets
    2. Templating Language
  5. Creating Pages
    1. Editing Content
  6. Download
  7. News & Updates
  8. Support
Stacey 2.3
Not backwards compatible

Stacey 3 is not backwards compatible with Stacey 2.3. This website serves as an archive because the old 2.3 documentation was not migrated to the github wiki (that is currently hosting the Stacey 3 documentation).

Now unmaintained, all technical support is now choppy and community led as github issues.

Templating Language

Stacey pre-parses each template as plain text before it is rendered out as html. As the templating system runs off regular expressions, there is no need to explicitly wrap the language constructs in <?php ?> tags.

Language Constructs

Within stacey templates, you have access to three language constructs: get blocks, foreach loops & boolean if statements.

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

Variable Context

Once you are inside a foreach loop, the variable context changes to the current object being referenced by the loop.

If you want to temporarily shift to the context of a specific page, you can add a get block.

get "/projects/project-1" do
  <p>@page_name</p>
end

This will change the context from the current page being viewed to the /projects/project-1 page. This means $children will be filled with the children of the /projects/project-1 page, @page_name will equal 'Projects', etc.

So, if you wanted to only list children of the /projects folder which do not contain children of their own, you could construct the following partial:

get "/projects" do
  foreach $children do
    if !$children do
      <p><a href="@url">@page_name</a></p>
    endif
  endforeach
end

Limiting foreach Loops

It is possible to limit foreach loops using a $collection[start:limit] syntax.
The array will essentially be sliced from the provided start until the limit.

The start & limit are both optional. You could specify $collection[:2] to only list the first two items, or $collection[2:] to list all items except the first two.

The following partial would list the third & fourth items from the $children collection:

<ol id="navigation">
  foreach $children[2:2] do
    <li><a href="@url">@page_name</a></li>
  endforeach
</ol>

Nesting foreach Loops

To give you the ability to pass through multiple levels of objects, foreach loops can also be nested within themselves (although using recursive partials would be a more elegant solution).

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